在java中使用volatile变量

在java中使用volatile变量,java,multithreading,Java,Multithreading,我正在阅读《实践中的Java并发》一书 我偶然发现volatile的语句应该用在以下标准中 对变量的写入不取决于其当前值,或者 可以确保只有一个线程更新/写入该值 变量不参与其他状态的不变量 变数 在执行以下操作时,无需出于任何其他原因锁定: 正在访问变量 有谁能举例说明这三种情景。回答您的问题: volatile用于读取值;它确保所有线程都可以看到写操作。它不阻止写入竞争条件 写入的原子性仅在字段上易失性不提供对其他字段写入的协调 写入操作不包括或保护其他操作 只是谷歌同步和volatile据

我正在阅读《实践中的Java并发》一书

我偶然发现volatile的语句应该用在以下标准中

  • 对变量的写入不取决于其当前值,或者 可以确保只有一个线程更新/写入该值
  • 变量不参与其他状态的不变量 变数
  • 在执行以下操作时,无需出于任何其他原因锁定: 正在访问变量
  • 有谁能举例说明这三种情景。

    回答您的问题:

  • volatile
    用于读取值;它确保所有线程都可以看到写操作。它不阻止写入竞争条件
  • 写入的原子性仅在字段上<代码>易失性不提供对其他字段写入的协调
  • 写入操作不包括或保护其他操作

  • 只是谷歌同步和volatile据我所知,每次调用volatile变量时,它都是从实际内存加载的,而不是从以前的缓存加载的。。。因此,该变量不应用于其他目的。在多线程环境中,一个线程可能在另一个线程完成对其的写入之前读取volatile数据。要理解volatile u这个词,必须通过java的内存模型。对易失性变量的访问引入了内存屏障。而且编译器不能围绕易失性变量的访问优化指令。这是一本很好的参考书,请举例说明。在他们要求的采访中examples@coder25例如,根据我的回答,情况就是这样。我相信你能想到一些。此外,如果你想不出一些,你不应该申请这份工作。我想补充一点,只有使用volatile,所有线程都可以看到它,但你不知道确切的时间@代码25如果你想知道更多,请阅读