csworkman

个人博客

volatile——介绍

2022-6-7 Mr Chang JUC

  1. 特点:可见性,有序性
  2. 语义:
    当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量立即刷新回主内存中。
    当读一个volatile变量时,JMM会把该线程对应的本地内存设置为无效,重新回到主内存中读取最新共享变量。

       内存屏障
1654583582(1).jpg
  1. 由于volatile变量只能保证可见性,在不符合以下两条规则的运算场景中,我们仍然要通过加锁来保证原子性
    运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。
    变量不需要与其他的状态变量共同参与不变约束。

  2. 禁止重新排序的三种情况(重排序发生,会导致程序运行结果不同。)
    写后读————a=1; b=a; ————写一个变量之后在读这个变量
    写后写————a=1; a=2;———— 写一个变量之后,在写这个变量
    读后写————a=b;b=1;——————读一个变量之后,在写这个变量

发表评论: