千家信息网

Java中如何使用volatile关键字

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,Java中如何使用volatile关键字,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。volatile关键字的作用就是使
千家信息网最后更新 2024年11月19日Java中如何使用volatile关键字

Java中如何使用volatile关键字,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

volatile关键字的作用就是使变量在多个线程间可见。

请点

我们看线程进入了循环停止不了了,虽然我们设置isRuning属性等于false但是循环还是没有停止,这到底是什么原因呢?要想知道这个问题的产生原因我们就要先了解线程的内存结构。这里我们只是简单的了解一下,在后面的文章中我们在重点介绍Java中线程的内存模型。

实际上在Java中多线程都有一个自己的内存空间,每个线程的内存空间与其它线程内存空间是不同步的,也就是说不同的线程与线程之间是无法直接交互的。它们是通过主内存来交互的。当多线程执行时,它会先把主内存中的属性拷贝到自己的线程内存中然后在去执行具体的逻辑操作,当处理完毕后再将处理结果同步到主内存中。如果两个线程是异步执行的,那它们都会把主内存中的数据拷贝到自己的内存空间中处理,当处理完毕后都会将自己的处理数据同步到主内存中,这也是开发多线程程序有线程安全问题的根本原因。就是在多个线程都将自己线程内存中的数据同步到主内存中产生的问题。

上述代码出现循环不结束的原因是因为当线程启动后会将isRuning属性拷贝到自己的线程内存中,然后执行循环,这时我们虽然设置了isRuning属性为false,但是这设置的是主内存的属性值,线程中的isRuning属性还是true,线程不会在去主内存中取值,所以程序还是会一直执行循环的。

那怎么样才能解决这个问题呢 ,可能有人会想说用synchronized同步方法,但按照我们上述所分析的,这不是多个线程同时访问实例变量产生的问题,而是线程内存与主内存不同步的问题,显然用synchronized是解决不了上述问题的。那么怎么办呢?

放心在Java中还提供了一个关键字来解决类似上述问题所产生的线程安全,它就是volatile关键字。这也是我在文章开头所说的。volatile关键字的作用就是使变量在多个线程间可见。看它的说明感觉挺让人费解的。那我们简单点说明就是用volatile关键字修饰的变量只能保存在主内存中,或者说线程在使用volatile数据时只能去主内存中是取值。也可以理解为每个线程在拷贝主内存数据到自己的线程内存时,volatile关键字修饰的变量是拷贝不了的。这也就保证了无论有多少个线程,如果它们需要使用volatile关键字修饰的变量,那只能去主内存中是取值。这恰恰是我们想要的,所以上述的代码我们只需添加一个volatile关键字就能解决死循环的问题了。

我们看循环结束了,原因就是像我们刚刚所说的那样。在实际的开发中volatile关键字在多线程中我们经常使用。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

线程 内存 关键 关键字 问题 循环 变量 就是 属性 同步 原因 拷贝 数据 处理 多个 空间 文章 还是 安全 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 首都网络安全日100字 荆门哪里有软件开发的公司 平江中学护苗网络安全 时间服务器同步时钟多少钱 2020年度网络安全责任制自评 云服务器和普通服务器的区别 信息化软件开发服务价格优惠 桂阳好的软件开发 宽带访问专线服务器 优炫数据库有安全性吗 论文参考文献数据库的顺序 性能测试如何监控服务器资源 爱旅行项目数据库表关系图 从事网络安全工作的认识 汇丰广州软件开发中心 中山数据链软件开发报价行情 每人天多少钱软件开发 图片安全存储方案软件开发 安装的数据库为什么没有代理服务 优惠券卡包数据库表设计 剑灵服务器断开3000 海南大学网络安全国 网络安全军备竞赛 辽宁机电软件开发包括哪些 老人与海小说软件开发 中国38岁软件开发 登陆数据库提示无监听程序 网络安全宣传画幼儿 两台电脑数据库怎么连接 佛山微想网络技术
0