volatile关键字

JMM JAVA内存模型:

    1.各个线程中的工作内存不可见,volatile可以解决可见性

 

可见性: 如下图:

      主内存:所有变量都存储在主内存,各线程都可以访问

     线程工作内存: 1.要将主内存变量拷贝回来自己工作内存,

                    2.如果有修改,修改工作内存副本,然后将变量写回主内存。

     内存可见性:如果A线程修改了主内存的变量,线程B和线程C并不知道修改了。要让及时让其他线程知道,就是内存的可见性。

 

-----------------------------------------------------------------------------------

 

  1. volatile 不支持原子性(完整一致,要不全部执行,要不不执行)。

如多个线程对 某个动作做++,会有线程安全问题。使用 aotomicInteger等 保持原子性。

2.指令重排:

原文地址:https://www.cnblogs.com/GotoJava/p/12584045.html