这个问题在这里已经有了答案:
9年前关闭。
java中何时以及为什么需要volatile修饰符?
我有兴趣看到 volatile 修改原语或对象引用的真实世界用法。
最佳答案
volatile 修饰符会告诉 JVM 小心并发运行的线程。本质上, volatile 用于指示变量的值将被不同的线程修改。
声明一个 volatile Java 变量意味着:
我们在第二点说“好像”,因为至少对程序员(并且可能在大多数 JVM 实现中)不涉及实际的锁对象。
volatile 修饰符告诉编译器,由 volatile 修改的变量可能会被程序的其他部分意外更改。其中一种情况涉及多线程程序。
在多线程程序中,有时,两个或多个线程共享同一个实例变量。出于效率考虑,每个线程都可以保留自己的此类共享变量的私有(private)副本。
变量的真实(或主)副本在不同时间更新,例如在输入同步方法时。虽然这种方法工作正常,但有时可能效率低下。在某些情况下,真正重要的是变量的主副本始终反射(reflect)其当前状态。
为确保这一点,只需将变量指定为 volatile,它告诉编译器它必须始终使用 volatile 变量的主副本(或者,至少,始终将任何私有(private)副本与主副本保持同步,反之亦然) .此外,对主变量的访问必须按照它们在任何私有(private)副本上执行的精确顺序执行。
关于java - 什么时候使用 Volatile 修饰符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10393728/