文章目录
  1. 1. 1.概述:
  2. 2. 2.原理:
  3. 3. 3.重排序:
  4. 4. 4.使用原则:
  5. 5. 5.一般用法:
  6. 6. 6.volatile 读写内存语义及其实现

1.概述:

volatile相当于是synchronized的弱实现,一种稍弱的同步机制,只实现了可见性,没有实现原子性。用来确保将变量的
更新操作通知到其他线程。

2.原理:

被声明了volatile的变量上的相关操作(比如getset)不会参与指令重排序。直接在主存中,对其他变量可见,因此
读取其变量的值时会返回最新的值。

3.重排序:

只要程序的最终结果等于它在严格的顺序化环境下的结果,那么指令的执行顺序就可能与代码的顺序不一致。多线程的
环境下,谁也想不到那个任务会先执行,执行多久。

4.使用原则:

(1).对变量的写入不依赖于变量的当前值(不会先检查再更新),或者保证只有有一个线程更新变量的值
(2).该变量不会和其他变量一起纳入不变性条件(在创建后其状态不可改变)
(3).在访问该变量时不用加锁

5.一般用法:

一般用作某个操作完成或发生中断,等状态信息,比如:ReentrantLock的实现依赖于java同步器框架AQS。
AQS使用一个整型的volatile变量(命名为state)来维护同步状态

6.volatile 读写内存语义及其实现

volatile 读写内存语义

文章目录
  1. 1. 1.概述:
  2. 2. 2.原理:
  3. 3. 3.重排序:
  4. 4. 4.使用原则:
  5. 5. 5.一般用法:
  6. 6. 6.volatile 读写内存语义及其实现