volatile
2021-04-13 15:01:45 4 举报
volatile
作者其他创作
大纲/内容
保持线程可见性
没有volatile的场景
t
m=0
7 astore_1
thread 2
建立连接
指令重排序
4 invockespecial #3 <T.<init>>
thread 1
if(t!=null)使用了半初始化的对象 t
volatile
0 new #2 <t>
MESI→CPU缓存一致性协议
DCL DoubleCheckLock
m=8
不保证原子性
指向半初始化的对象
您该笔订单为0
源码Class T{ int m=8;}T t=new T();
提速
cpu并发执行指令
不能取代synchronized
step 1 半初始化
禁止指令重排
step 2 指令重排
使用了半初始化的对象会导致丢失数据
1w的订单
step 3 thread 2进行访问
超高并发
内存屏障
0 条评论
下一页