大家好,又见面了,我是你们的朋友全栈君。
本篇来自java并发编程实战关于volatile的总结。
要说volatile,先得明白内存可见性。那我们就从内存可见性说起。
一、内存可见性
public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread{
public void run(){
while(!ready)
Thread.yield();
System.out.println(number);
}
}
public static void main(String[] args){
new ReaderThread().start();
number = 42;
ready = true;
}
}
在没有同步的情况下,编译器、处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整。在缺乏足够同步的多线程程序中,要相对内存操作的执行顺序进行判断,几乎无法得出正确的结论。
这看上去似乎是一种失败的设计,但却能使JVM充分地利用现代多核处理器的强大性能。例如,在缺少同步的情况下,java内存模型允许编译器对操作顺序进行重排序,并将数值缓存在寄存器中。此外,它还允许CPU对操作顺序进行重排序,并将数值环迅在处理器特定的缓存中。
二、Volatile变量
加锁机制既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性。
其他可参考的资料:Java并发编程:volatile关键字解析
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161252.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...