Java并发 chapter3 共享对象

可见性

对象引用的可见性与对象域可见性不同???

锁在保证原子性的同时保证了可见性

原子性通过引入不可分割的语义,保证了自身的执行的正确性,通过状态集不被其他线程修改。

可见性:自身的执行对状态的修改可能影响其他线程的约束。修改——可见存在延迟,可见性去除了其中的延迟。

提供可见性的状态维护了这组状态的一致快照

 

volatile提供可见性,但只针对原子性的读写操作

实现上不使用锁,线程不会阻塞

常用作状态标志

非复合:读写不可依赖于变量;不与其他变量构成约束(从而相关);访问变量时不需要加锁???双重可见性冗余了?

 

发布:可访问其引用

公共静态变量、非私有域、内部类发布外部类

安全的对象构造:当且仅当构造函数返回时,对象处于可预测的一致状态。构造过程中this引用不可逸出

 

线程封闭:

局部变量、ThreadLocal

//单个线程修改volatile变量

局部变量:基本类型:封闭;引用:须保证不逸出

ThreadLocal:每个线程保存变量的独立副本:如事务上下文

 

不变对象:

正确创建:不逸出

所有域final:确保初始化安全

不修改状态

 

//由volatile变量+引用不可变+引用可变变量提供原子性

 

以上将对象封闭在线程或对象内部,保证不发布

 

安全发布

 

上一篇:chapter3 数据链路层


下一篇:Chapter3 New Language Features