JMM设计原理之双重检查Lock

错误示例

public class DoubleCheckedLocking {/*** 单例.*/private static Instance instance;/*** 获取单例.* @return 对象.*/public static Instance getInstance() {if (instance == null) {synchronized (DoubleCheckedLocking.class) {if (instance == null) {instance = new Instance(); // 问题根源.}}}return instance;}
}

问题根源 

instance = new Instance(); 指令重排序

期望顺序

memory = allocate(); //1、分配对象的内存空间
ctorInstance(memory);//2、初始化对象
instance = memory;   //3、设置instance 指向内存地址

可能重排序

memory = allocate(); //1、分配对象的内存空间
instance = memory;   //3、设置instance 指向内存地址
// !!!注意:此时对象还未初始化
ctorInstance(memory);//2、初始化对象

解决方案

        1、volatile 域

        2、类的初始化

1、volatile 域

	/*** 单例.*/private static volatile Instance instance;

2、类的初始化

	/*** 单例.*/private static Instance instance = new Instance();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习引擎的终极形态是什么?

来源:微软研究院AI头条概要:1月17日,院友袁进辉博士回到微软亚洲研究院做了题为《打造最强深度学习引擎》的报告,分享了深度学习框架方面的技术进展。1月17日,院友袁进辉博士回到微软亚洲研究院做了题为《打造最强深度…

linux进程映像由哪些构成,Linux编程开发进程映像类型分析

进程与线程问题是程序员在学习编程开发语言需要重点掌握的编程知识之一,而今天我们就一起来了解一下,Linux编程开发中进程映像的执行标准。什么是进程映像呢?进程映像是执行程序时所需要的可执行文件,通常会包括下面这些东西代码段(codesegm…

JMM同步原语之final域的内存语义

final 域为引用类型 public class FinalReference {/*** final 域.*/final int[] arr;static FinalReference ref;public FinalReference() {arr new int[1];arr[0] 1;}public static void writeOne() {ref new FinalReference();}public static void writeTwo() {ref.arr[…

AI芯片之争白热化的当下,如何设计一款真正适用于终端的AI芯片?

来源:36氪概要:2017年,人工智能最火的风口一定是AI芯片。2017年,人工智能最火的风口一定是AI芯片。AI芯片的出现,与深度学习技术的成熟及应用密不可分。深度学习的过程可以简化理解为利用大量标注的数据进行训练&#…

linux nslookup命令安装,在CentOS中安装nslookup命令

域名查询工具nslookup并不是Win系统的专利,Linux系统中也可以使用,不过要安装,默认没有。在CentOS中安装nslookup命令:$ sudo yum install bind-utils这个bind-utils包,就包含了nslookup命令。Ubuntu系统应该也是一样的&#xff0…

李开复:AI巨头是有史以来最难以打破的垄断

来源:凤凰网概要:李开复认为目前最需要的是小的AI公司,甚至于打破巨头垄断局面的“破局者”也会是这些由小变大的AI公司。当地时间周二(1月23日),世界经济论坛在瑞士达沃斯小镇正式举行,各国政要、企业家、学者云集。创…

杨立昆辞Facebook人工智能实验室主任,任首席科学家

来源:澎湃新闻概要:他将不再担任Facebook 人工智能实验室主任一职,改任Facebook首席人工智能科学家,从而能更加专注于带领科学研究与AI策略。当地时间1月23日,执掌Facebook人工智能实验室(FAIR)…

Redis系列一、redis介绍与安装

一、Redis介绍 redis是一种基于键值对(key-value)数据库,其中value可以为string、hash、list、set、sorted set等多种数据结构,可以满足很多应用场景。还提供了键过期,发布订阅,事务,流水线&am…

redhat6.3的linux内核版本,1-6-RHEL6.3-内核升级(Red Hat Enterprise Linux Server6.3)@树袋飘零...

本节介绍内容:1、内核的概述2、源码编译安装文件系统中的ntfs内核模块案例分析1、内核的概述Linux操作系统是用来跟硬件和用户程序互联的支撑平台,设备的驱动程序完全可以访问硬件,而设备的驱动程序以模块化的形式设置,可以进行安…

MIT人工突触芯片新突破:指甲大小的芯片有望媲美超算

原作 Jennifer ChuRoot 编译自 MIT News量子位 出品 | 公众号 QbitAI论传递信息的能力,计算机的二进制目前还比不上人脑。因为大脑神经元之间传递的信号形式远多过0或1两种:根据突触(神经元之间的结构)间不同的神经递质&#xff0…

Redis系列二、redis的五种数据结构和相关指令之String

redis是一种基于键值对(key-value)的内存数据库,redis数据结构可以分为string、hash、list、set、sorted set。本节中将介绍Redis支持的主要数据结构中的string,以及相关的常用Redis命令。 redis的五种数据结构和相关指令之Strin…

体积最小桌面linux,Tiny Core Linux - 体积最小的精简 Linux 操作系统发行版之一 (仅10多MB) - 蓝月网络...

Tiny Core Linux (TCL) 是一款极体积极小且高度可扩展的微型 Linux 发行版,它将一个 Linux 操作系统精简到仅有 10 多 MB 左右的大小,似乎小巧得有点让人叹为观止!要知道无论是常见的 Ubuntu、CentOS、Debian 的体积动辄就是几百MB甚至要上GB…

美国公布长达35页的《2016-2045年新兴科技趋势报告》

来源:云谷资本概要:前段时间美国公布的一份长达35页的《2016-2045年新兴科技趋势报告》。该报告是在美国过去五年内由政府机构、咨询机构、智囊团、科研机构等发表的32份科技趋势相关研究调查报告的基础上提炼形成的。前段时间美国公布的一份长达35页的《…

Redis系列三、redis的五种数据结构和相关指令之Hash

本节中将介绍Redis支持的主要数据结构,以及相关的常用Redis命令。redis是一种基于键值对(key-value)的内存数据库,redis数据结构可以分为string、hash、list、set、sorted set。 redis的五种数据结构和相关指令之Hash 哈希hash …

linux 运行 dmol3,Dmol3建模及优化

以单层石墨烯为例:1. 建模1) 打开MS,新建项目,通过File—import查找Structures/ceramics/graphite并打开,即引入石墨的晶格结构,命名为graphene;2) Build—Symmetry—Make P1,去除对称性&#x…

深度学习在推荐系统上的应用

作者:陈仲铭,知乎 ID:ZOMI深度学习最近大红大紫,深度学习的爆发使得人工智能进一步发展,阿里、腾讯、百度先后建立了自己的AI Labs,就连传统的厂商OPPO、VIVO都在今年开始筹备建立自己的人工智能研究所。确…

Redis系列四、redis的五种数据结构和相关指令之List

本节中将介绍Redis支持的主要数据结构,以及相关的常用Redis命令。redis是一种基于键值对(key-value)的内存数据库,redis数据结构可以分为string、hash、list、set、sorted set。 redis的五种数据结构和相关指令之List 列表list …

linux 串口最高速率,Uart 16c950 linux速度高于B4000000(4Mbps)

大家,我正在使用Ubuntu下的高速RS422 pci板(OXPCIe958).该设备可以工作高达15Mbps.我需要以10Mbps的速度工作,但我注意到在Linux下,如果我们使用termois,可以指定的最大速度是B4000000(4 Mbps).有没有办法在linux中指定自定义波特率?我试图改变这些值在termois.h中&…

那些顶级的AI机器人“大脑”

来源:机器人创新生态概要:如果说AI是赋予各个下游产业的“大脑”,那分布在世界各地的研究院就是AI的“大脑”。如果说AI是赋予各个下游产业的“大脑”,那分布在世界各地的研究院就是AI的“大脑”。从地域来看,美国依然…

Redis系列五、redis的五种数据结构和相关指令之Set

本节中将介绍Redis支持的主要数据结构中的set,以及相关的常用Redis命令。 redis的五种数据结构和相关指令之set 集合set 集合(set)与列表类似,都是用来保存多个字符串,但集合与列表有两点不同:集合中的元…