导致共享变量在线程间不可见的原因:

1:线程交叉执行:

2:重排序结婚线程交叉执行

3:共享变量更新后值没有在工作内存和主存间即时更新

 JMM 关于synchronized的两条规定:

1 线程解锁钱,必须把共享变量的最新值写到主内存

2:线程加锁时,将清空工作内存中的变量值,从而使用共享变量时需要从主内存中重新读取最新值(加锁解锁是同一把锁)

可见性 - volatile

对volatile变量写操作时,会在写操作后加入一条store屏障,将本地内存中的共享变量值刷新到主存

对volatile读操作时,会在读前面加入一条load屏障指令,从主内存中读取共享变量

线程可见性

 

volatile 使用情况

1 对变量的写不依赖当前值

2 适合状态标记量

相关文章:

  • 2021-04-21
  • 2021-09-05
  • 2021-07-31
  • 2021-12-25
  • 2021-03-31
  • 2021-07-02
  • 2021-11-16
  • 2021-12-23
猜你喜欢
  • 2021-10-01
  • 2021-04-30
  • 2021-12-28
  • 2021-08-14
相关资源
相似解决方案