导航:首页 > 编程语言 > java双重检查锁

java双重检查锁

发布时间:2024-07-28 23:27:01

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

已经修改,的确应该加上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。从而得到不完整的对象。

阅读全文

与java双重检查锁相关的资料

热点内容
awss3命令 浏览:356
百度店铺客户订单手机加密 浏览:500
钉钉班群文件夹怎么上传文件 浏览:749
人社app怎么解绑手机 浏览:101
caj文件夹打不开 浏览:475
什么app可以将电量变色 浏览:692
解放出你的解压抖音小游戏 浏览:345
什么方式解压比较好 浏览:266
erp是什么服务器 浏览:185
python中tmp 浏览:24
说明wpf加密过程 浏览:145
java读取list 浏览:703
iis7gzip压缩 浏览:40
有什么安卓机打吃鸡好 浏览:598
三星u盘加密狗 浏览:474
php函数的返回值吗 浏览:588
国企稳定程序员 浏览:328
编程猫如何使用教程视频 浏览:221
安卓远端网页如何打日志 浏览:218
压缩flash大小 浏览:993