问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java单例双重检查锁为什么需要加volatile关键字

发布网友 发布时间:2022-04-22 05:09

我来回答

2个回答

热心网友 时间:2023-09-23 16:36

已经修改,的确应该加上volatile关键字。不加的情况下,假设两个线程,线程A正在执行instance = new Instance()的操作,而线程B开始执行if(instance==null)的判断,当不存在volatile的时候,因为 new Instance()是一个非原子操作,可能发生无序写入,构造函数可能在整个对象构造完成前执行完毕,线程B可能会看到一个不完整的instance对象,因为java的某些实现会在内存中开辟一片存储对象的区域后直接返回内存的引用,所以线程B判断不为null,而这时候实际上,instance的构造函数还没有执行,从而线程b得到不完整的对象。在 Instance 的构造函数执行之前,会在内存中开辟一片存储对象的区域后直接返回内存的引用,赋值给变量 instance,instance也就可能成为非 null 的,即赋值语句在对象实例化之前调用,此时别的线程得到的是一个还会初始化的对象,这样会导致系统崩溃线程B可能会看到一个不完整的instance对象,因为java的某些实现,所以线程B判断不为null。从而得到不完整的对象。

热心网友 时间:2023-09-23 16:36

volatile关键字起到提醒JVM这个变量永远去内存当中去获取值(有时候值会被写到寄存器当中)

被volatile声明的变量,那么所有的线程都会得到一样的值。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 火锅餐厅厨房有哪些 小火锅厨房设备有哪些 用java语言写双重循环语句输出下面图案 java中,有双重循环,怎样在第二层循环中直接跳出... java中for双重嵌套计算方法 java 双重for循环使用 如何用java双重循环实现第一行五个星第二行三个星... java中双重for循环,执行顺序是怎样的? 在java中双重检查加锁为什么会失效 如何在阿里云申请免费SSL证书 JAVA 单例双重检查为什么不好用 java双重循环题怎么分析 java双重异常处理 申请ssl证书的价格为什么差那么多? 如何在Java中使用双重检查锁实现单例 选购SSL证书为什么都选国外的? java中双重引用是什么 阿里云上注册的域名https快要到期了,怎么办? java双重循环怎么理解 阿里云的ssl证书免费的,iis安装证书和绑定后 http... DKEY双因素身份认证系统的系统组成 我的域名是阿里云,空间是腾讯云的,想申请httptps... 单例模式 java 双重锁用synchronized修饰之后还用v... 中国移动怎么办理流量包? 中国移动办理流量套餐,怎么办? 移动怎么开通流量包 中国移动如何办理三天流量包? 移动流量提速包怎么办理 怎么办理流量提速包 中国移动卡怎么包流量呢? 按了重置路由器连不上网了怎么办 怎么避免自己微信二维码被盗刷? 怎样把自己的微信二维码扫描放在纸上 电脑版微信如何导出自己的微信二维码 好友能看到我的微信二维码吗 这是什么动画?(对不起,图片有点→_→) 我大学还没毕业的话应该填大学的还是学历还是高中... 在校大学生的学历是高中生还是本科生 大学拿不到毕业证书是不是就=高中学历? 正在读大学还没毕业文化水平是高中还是大学? 取得高中毕业证在本科大学学习尚未毕业,学历是高... 如果大学读一半不读了,是高中文凭还是肆业?