一切真是有缘,上午刚刚看完单例模式,还在为其中的代码块同步而兴奋,下午就遇见这篇文章:双重检查锁定与延迟初始化。我一看,文章开头语出惊人,说这是一种错误的优化,我说,难道上午学的东西下午就过时了吗?仔细一看,发现了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练习代码库

最新文章

  1. 动态主机配置协议(DHCP)如何启动和关闭
  2. java使用split分隔,需要注意的点
  3. 【leetcode】Single Number II (medium) ★ 自己没做出来....
  4. ulimit调优
  5. [改善Java代码]列表相等只需关系元素数据
  6. 使用第三方SDK出现: duplicate symbol _llvm.cmdline in:
  7. log4net 学习笔记
  8. div滚动与控制
  9. CGAffineTransform 放射变换解析 即矩阵变换
  10. 基于Quartz.NET框架的WinForm任务计划管理工具
  11. Python 进程与线程小随笔
  12. ECMA Script 6_symbol(symbol.iterator) 新接口_iterator接口
  13. c# webapi上传、读取、删除图片
  14. linux自动备份lampp的日志
  15. redmine在linux上的mysql性能优化方法与问题排查方案
  16. 【Java】 剑指offer(16) 打印1到最大的n位数
  17. tensorflow实战系列(一)
  18. docker使用示例
  19. wdk Windows驱动开发
  20. 解题:BZOJ 4808 马

热门文章

  1. python练习:寒冰猴子狐狸,猫狗咬架
  2. auto-sklearn
  3. 缓存:修改Hosts不生效
  4. (4)Flask项目模板渲染初体验
  5. centos7.6下的python3.6.9虚拟环境安装elastalert
  6. 【Log】logback实现每个类和包自定义级别输出
  7. 转 Linux sudo命令
  8. PAT 甲级 1074 Reversing Linked List (25 分)(链表部分逆置,结合使用双端队列和栈,其实使用vector更简单呐)
  9. Nginx - 代理后端通过域名访问
  10. flex布局大全