2024-03-23
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1902134652

回答

volatile 是一种轻量级的同步机制,它能保证共享变量的可见性,同时禁止重排序保证了操作的有序性,但是它无法保证原子性。所以使用 volatile 必须要满足这两个条件:

  1. 写入变量不依赖当前值。
  2. 变量不参与与其他变量的不变性条件。

volatile 比较适合多个线程读,一个线程写的场合,典型的场景有如下几个:

  1. 状态标志
  2. 重检查锁定的单例模式
  3. 开销较低的“读-写锁”策略

详解

volatile 使用条件

要想正确安全地使用 volatile ,必须要具备这两个条件:

  • 写入变量不依赖当前值:变量的新值不能依赖于之前的旧值。如果变量的当前值与新值之间存在依赖关系,那么仅使用 volatile 是不够的,因为它不能保证一系列操作的原子性。比如 i++。
  • 变量不参与与其他变量的不变性条件:如果一个变量是与其他变量共同参与不变性条件的一部分,那么简单地声明变量为 volatile 是不够的。