Java并发编程——第3章:对象的共享(二)
其他
2018-09-24 18:55:12
阅读次数: 0
3.1.4 Volatile变量
- Java语言提供了一种削弱的同步机制,即Volatile变量,用来确保将变量的更新通知到其他线程。
- 在访问Volatile变量时不会执行加锁操作,因此也就不会执行线程阻塞,是一种比synchronized更轻量级的同步机制。
- 当把变量声明为Volatile后,编译器和运行时都会注意到这个变量是共享的,因此不会讲该变量上的操作与其他内存操作一起重排序。Vloatile变量不会被缓存在寄存器或者其他处理器不可见的地方,因此在读取该类型变量时总会返回最新写入的值。
- 写入Volatile变量值相当于退出同步代码块,而读Volatile变量相当于进入代码块。
- 不能过度依赖Volatile变量提供的可见性,因为其通常比使用锁的代码更脆弱,也更难理解。仅当volatile变量能简化代码的实现以及对同步策略的验证时,才应该使用它们。其正确的使用方式是:确保自身状态的可见性,确保它们所引用对象的可见性,以及标识一些重要的程序生命周期事件的发生。
- 加锁机制既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性。
- 当且仅当满足一下条件才使用volatile变量:
- 对变量的写入操作完全不依赖变量当前的值,或者确保只有单个线程更新变量的值
- 该变量不会与其他变量一起纳入不变性条件中
- 在变量访问时不需要加锁
3.2 发布与逸出
转载自blog.csdn.net/Curry7895/article/details/82696771