Java中volatile关键字的最全总结

转载至: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可以防止指令重排,但是有条件,具体看上面链接。

原文地址:https://www.cnblogs.com/chiweiming/p/11202817.html