⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠
Text Elements
对象是否在多线程中共享
可见性
发布与逸出
多线程共享该对象,
可以看到最新结果
由于JMM内存模型,因此存在多种问题
- 失效数据 - get或set操作并非真正修改了
主内存的数据,可能仅仅修改了寄存器,导致对
其他线程不可见 - 非原子的64位操作 - 64位分解成两个32位操作
出现的问题
Synchronized
实现方法1
volatile
实现方法2
让其他线程都看到
线程封闭
- Ad-hoc 线程封闭
- 栈封闭
- ThreadLocal 类
不变性
对象不可变,即可多线程中共享
线程各自用各自的
- final 构建不可变对象
- volatile 发布不可变对象
安全发布
安全发布的常用模式
三种对象类型
- 不可变对象
- 事实不可变对象
- 可变对象