volatile详解
更新日期:
1.概述:
volatile相当于是synchronized的弱实现,一种稍弱的同步机制,只实现了可见性,没有实现原子性。用来确保将变量的
更新操作通知到其他线程。
2.原理:
被声明了volatile的变量上的相关操作(比如get和set)不会参与指令重排序。直接在主存中,对其他变量可见,因此
读取其变量的值时会返回最新的值。
3.重排序:
只要程序的最终结果等于它在严格的顺序化环境下的结果,那么指令的执行顺序就可能与代码的顺序不一致。多线程的
环境下,谁也想不到那个任务会先执行,执行多久。
4.使用原则:
(1).对变量的写入不依赖于变量的当前值(不会先检查再更新),或者保证只有有一个线程更新变量的值
(2).该变量不会和其他变量一起纳入不变性条件(在创建后其状态不可改变)
(3).在访问该变量时不用加锁
5.一般用法:
一般用作某个操作完成或发生中断,等状态信息,比如:ReentrantLock的实现依赖于java同步器框架AQS。
AQS使用一个整型的volatile变量(命名为state)来维护同步状态