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

热点内容
程序员入门很难吗 浏览:101
70后程序员照片 浏览:191
一个普通程序员能干多久 浏览:934
adobe的PDF转换器 浏览:853
单片机数字码表汇编 浏览:477
单片机开发用的软件 浏览:152
程序员8个算法题 浏览:402
php题库系统 浏览:221
王牌战争文明重启选什么服务器 浏览:653
简述对称加密法 浏览:658
c语言数学编程 浏览:990
F1B命令 浏览:630
cs命令快捷键 浏览:852
阿里云购买服务器如何用现金支付 浏览:691
pythontime等待 浏览:989
单片机串行通信方式 浏览:499
android表格demo 浏览:278
安卓怎么让相册不显示网页 浏览:314
php文件系统源码 浏览:727
易信java 浏览:501