Volatile关键字——内存可见性
2021/5/4 7:27:08
本文主要是介绍Volatile关键字——内存可见性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
所有线程的共享变量都存储在主内存中,每一个线程都有一个独有的工作内存,每个线程不直接操作在主内存中的变量,而是将主内存上变量的副本放进自己的工作内存中,只操作工作内存中的数据。当修改完毕后,再把修改后的结果放回到主内存中。每个线程都只操作自己工作内存中的变量,无法直接访问对方工作内存中的变量,线程间变量值的传递需要通过主内存来完成。 如下图:
示例代码:
/** * @author huxin * 创建时间:2021/5/3 */ public class VolatileTest { public static /*volatile*/ boolean flag = false ; public static void main(String[] args) throws Exception{ new Thread( ()->{ System.out.println("______begin__________"); while (!flag){ } System.out.println( "----------end---------"); }).start(); Thread.sleep( 2000l); //这一句确保第一个线程在自己的工作内存上读到flag变量 new Thread( ()->{ prepareData(); }).start(); } public static void prepareData(){ System.out.println("prepare set flag to true"); flag = true ; System.out.println("finish set flag to true"); } }
以上代码,如果不加 volatile 关键字,while(!flag)会一直等待,说明它的flag值为false,从而验证了另一个线程更新了共享变量它没读到.
这篇关于Volatile关键字——内存可见性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26手写消息中间件:从零开始的指南
- 2024-11-26Java语音识别项目资料:新手入门教程
- 2024-11-26JAVA语音识别项目资料:新手入门教程
- 2024-11-26Java语音识别项目资料:入门与实践指南
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料:新手入门教程
- 2024-11-25Java创意资料:新手入门的创意学习指南
- 2024-11-25JAVA对接阿里云智能语音服务资料详解:新手入门指南
- 2024-11-25Java对接阿里云智能语音服务资料详解