导航:首页 > 编程语言 > 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双重检查锁相关的资料

热点内容
安卓手机如何悄无声息整坏手机 浏览:800
php获取数据库名称 浏览:551
app服务器怎么防止交互端口 浏览:833
对一个算法的评价不包括 浏览:535
3D脸pdf 浏览:886
在编译之前更改指定时间 浏览:354
机房服务器电源线如何扎线 浏览:732
什么算法治宣传 浏览:18
哪个app可以测温枪 浏览:17
macmongodbphp 浏览:330
php写游戏服务器 浏览:875
对立阵营插旗命令 浏览:371
java实现帕斯卡三角形算法 浏览:316
linux文件名限制 浏览:708
金税三期代理服务器地址是什么意思 浏览:429
多自变量拟合Python 浏览:456
文件夹加密总是失败 浏览:510
androiddexpathlist 浏览:626
要卸载己加密的文件怎么办 浏览:158
ping服务器ip地址失败 浏览:136