volatile

volatile只有可见性,就是说一个线程改了某个值之后,其他线程能马上得到最新的值,不过volatile不具有原子性,也就是说线程之间是不安全的,在开发中少用。

1.重排序:从cpu方面出发,为了尽可能减少内存操作速度远慢于CPU运行速度所带来的CPU空置的影响,虚拟机会把一些后面的代码提到前面执行,但是在单线程的情况下,不会出现顺序混乱的问题,比如:

public void execute(){
    int a=0;
    int b=1;
    int c=a+b;
}

这里a=0,b=1两句可以随便排序,不影响程序逻辑结果,但c=a+b这句必须在前两句的后面执行。

原文地址:https://www.cnblogs.com/3chi/p/7274592.html