volatile底层原理

volatile实现原理:多处理器情况下,底层是通过JVM向处理器发送Lock前缀指令,Lock指令会让处理器将缓存回写到主存中去,并且使得其他处理器的缓存全部无效,也就是说,volatile可以读到主存里最新的值,即保证单个变量的可见性;除此之外,JVM还会发送load addl指令,load addl指令禁止指令重排,建立内存屏障,保证了内存指令操作的有序性。

 关于可见性和原子性的看法:


volatile int  i = 0;//多线程访问,无论哪个线程访问都能保证i = 0;这个是可见性。

i ++;  
//1、读i值;
//2、计算 i+1;
//3、将计算后的i值赋给i;
//多线程情况下,第一步读的i值保证可见性和原子性;第二步和第三部,都无法保证原子性。

参考:

https://www.jianshu.com/p/ef8de88b1343

https://www.cnblogs.com/dolphin0520/p/3920373.html

你可能感兴趣的:(JAVA基础,java多线程)