从学习“单例模式”学到的Java知识:双重检查锁和延迟初始化
2024-10-21 07:31:55
一切真是有缘,上午刚刚看完单例模式,还在为其中的代码块同步而兴奋,下午就遇见这篇文章:双重检查锁定与延迟初始化。我一看,文章开头语出惊人,说这是一种错误的优化,我说,难道上午学的东西下午就过时了吗?仔细一看,发现了volatile的用处百度百科:violiate,而这正是上午我阅读时不得其解的地方,为什么要用这个呢,在《Head
First设计模式》中只是简单说为了让多线程正确工作。而这篇文章,恰恰解决了我的这个疑惑,也就是uniqueInstance = new Instance()其实是分三步走的,编译器优化会对其进行重排列从而导致错误,所以需要volatile关键字禁止这种重排列。
我还通过这篇文章学了另一种单例模式的实现方法:
public class InstanceFactory {
private static class InstanceHolder {
public static Instance instance = new Instance();
}
public static Instance getInstance() {
return InstanceHolder.instance ; //这里将导致InstanceHolder类被初始化
}
}
具体的讲解十分精彩,请移步该文章共同学习。最后,推销一下我维护的github项目:HeadFirst练习代码库
最新文章
- 动态主机配置协议(DHCP)如何启动和关闭
- java使用split分隔,需要注意的点
- 【leetcode】Single Number II (medium) ★ 自己没做出来....
- ulimit调优
- [改善Java代码]列表相等只需关系元素数据
- 使用第三方SDK出现: duplicate symbol _llvm.cmdline in:
- log4net 学习笔记
- div滚动与控制
- CGAffineTransform 放射变换解析 即矩阵变换
- 基于Quartz.NET框架的WinForm任务计划管理工具
- Python 进程与线程小随笔
- ECMA Script 6_symbol(symbol.iterator) 新接口_iterator接口
- c# webapi上传、读取、删除图片
- linux自动备份lampp的日志
- redmine在linux上的mysql性能优化方法与问题排查方案
- 【Java】 剑指offer(16) 打印1到最大的n位数
- tensorflow实战系列(一)
- docker使用示例
- wdk Windows驱动开发
- 解题:BZOJ 4808 马
热门文章
- python练习:寒冰猴子狐狸,猫狗咬架
- auto-sklearn
- 缓存:修改Hosts不生效
- (4)Flask项目模板渲染初体验
- centos7.6下的python3.6.9虚拟环境安装elastalert
- 【Log】logback实现每个类和包自定义级别输出
- 转 Linux sudo命令
- PAT 甲级 1074 Reversing Linked List (25 分)(链表部分逆置,结合使用双端队列和栈,其实使用vector更简单呐)
- Nginx - 代理后端通过域名访问
- flex布局大全