转载至:https://blog.csdn.net/u012723673/article/details/80682208
关于volatile很重要的一点:
它保证了可见性,即其他线程对volatile的操作本线程可以马上得知。
/* * @author VX:18269399343 */ public class VolatileTest { private volatile static int num = 0; //加了volatile修饰后线程不能在自己的工作内存缓存num,每次直接和内存打交道,volatile保证了可见性:其他线程对volatile变量的修改本线程马上知道 public static void main(String[] args) throws InterruptedException { new Thread(()->{ while(num==0){ } }).start(); Thread.sleep(2000); num = 1; } }
不加volatile修饰会在子线程内死循环,加了volatile后主线程将会修改volatile的值,子线程会马上得到最新值。
volatile可以防止指令重排,但是有条件,具体看上面链接。