Skip to content
This repository has been archived by the owner on Dec 13, 2020. It is now read-only.

Latest commit

 

History

History
15 lines (15 loc) · 1.09 KB

4.composingobjects.md

File metadata and controls

15 lines (15 loc) · 1.09 KB

对象的组合

  • 设计线程安全的类
    • 确定对象state变量有哪些
    • 确定限制state变量的不变约束
    • 指定管理并发访问对象state的策略
  • 对象的state取决于它的field。Counter 只有一个value,那么state就只有一个。
  • 理解对象的不变约束和后验条件,才能保证线程安全。
  • state依赖的操作:无法从空队列取元素,无法向满队列放元素。
  • 将数据封装于对象内部,把对数据的访问限制于对象的方法上。
  • ArrayList和HashMap不是线程安全,通过包装器工厂方法Collections.synchronizedList等可以 保证线程安全。原理:利用修饰器模式将相关API方法实现为同步,请求转发到底层容器。
  • 如果一个类有多个独立的线程安全的state变量组成,类也不包含state转换, 那么可以将线程安全委托给这些变量。
  • 客户端加锁必须保证使用的锁和对象X保护自身state的锁一样。
  • 同步策略的文档化:为类的用户编写线程安全性担保的文档,为类的维护者编写类的同步策略的文档。