返回文章列表

推荐阅读:正确使用 Volatile 变量

地址:“Java 理论与实践: 正确使用 Volatile 变量” 摘要: 锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。 互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次...

1 分钟阅读

地址:“Java 理论与实践: 正确使用 Volatile 变量”

摘要:

锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。

互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。

可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 —— 如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或不一致的值,这将引发许多严重问题。

Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。

Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。

正确使用 volatile 的模式:

模式 #1:状态标志

模式 #2:一次性安全发布(one-time safe publication)

模式 #3:独立观察(independent observation)

模式 #4:“volatile bean” 模式

模式 #5:开销较低的读-写锁策略

评论交流

暂无评论,欢迎留下你的想法