---恢复内容开始---
1 对象组合的目的
将一些现有的线程安全类组合成更大的组件,也是线程安全的;
1.1 构造线程安全的类需要考虑:
构成对象状态的所有变量;
对象变量的不变性条件(对象的变量都有取值范围,要保证变量的取值都在这个范围内,
否则,对象的状态就是无效的);
建立对象状态的并发管理策略;
1.2 类的不变性条件和类的后验条件
不变性条件:变量都有一个取值范围,比如 long count,count的取值范围是Long.MIN_VALUE,Long.MAX_VALUE,
再加上自己定义的count>=0;故count变量的不变性条件就是count>=0 && count <= Long.MAX_VALUE;
后验条件:判断对象从一个状态A转到状态B是否是有效的;
1.3 状态的所有权
对象封装它拥有的状态,就拥有状态的所有权,也就是能改变状态;如果把这个对象的引用发布出去,那么对象就不是独占状态的所有权了,需要和其他的一起共享状态的所有权;
---恢复内容结束---
1 对象组合的目的
将一些现有的线程安全类组合成更大的组件,也是线程安全的;
1.1 构造线程安全的类需要考虑:
构成对象状态的所有变量;
对象变量的不变性条件(对象的变量都有取值范围,要保证变量的取值都在这个范围内,
否则,对象的状态就是无效的);
建立对象状态的并发管理策略;
1.2 类的不变性条件和类的后验条件
不变性条件:变量都有一个取值范围,比如 long count,count的取值范围是Long.MIN_VALUE,Long.MAX_VALUE,
再加上自己定义的count>=0;故count变量的不变性条件就是count>=0 && count <= Long.MAX_VALUE;
后验条件:判断对象从一个状态A转到状态B是否是有效的;
1.3 状态的所有权
对象封装它的状态,就拥有状态的所有权,也就是能改变状态;如果对象的引用发布出去,就不是对象独占状态的所有权了,就是和其他一起共享状态的所有权;
2.实例封闭
对象A被封闭到另一个对象B里面,访问对象A的路径都是已知的,便于做到线程安全;如果数据被封闭到对象里面,要访问数据都要通过方法,从而更容易确保并发的时拿到正确的锁;