单例模式的优化

单例模式懒汉式写法,单例模式的优化有以下四个方面:

  1. 使用同步保证线程安全synchronized
  2. 使用volatile关键字:volatile关键字提醒编译器后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。
  3. 防止反射调用私有构造方法
  4. 让单例序列化安全

代码实现

import java.io.Serializable;

public class Singleton implements Serializable {
//加上volatile关键字保证变量的一致性
private volatile static Singleton singleton = null; private Singleton() {
if (singleton != null) {
throw new RuntimeException("此类为单例模式,已经被实例化");
}
} public static Singleton getInstance() {
//外层判断是防止已经new过了
if (singleton == null) {
//加上synchronized关键字,保证线程安全
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}

最新文章

  1. 工厂方法模式——创建型模式02
  2. cmd命令查看局域网内计算机信息
  3. sqoop将关系型数据库的表导入hive中
  4. Tomcat_修改代码后tomcat是否需要重启
  5. CSS自定义弹出框
  6. android之费电检查 BetterBatteryStats
  7. 利用python进行数据分析 (学习笔记)
  8. 数往知来SQL SERVER 视图 触发器 <九>
  9. lintcode :nth to Last Node In List 链表倒数第n个节点
  10. HTML字符实体(Character Entities),转义字符串(Escape Sequence)
  11. V9最新手机门户域名绑定教程。
  12. Javascript:重用之道
  13. LCS算法思想
  14. wget多进程抓取的实现
  15. BZOJ 1951: [Sdoi2010]古代猪文( 数论 )
  16. 创建 github 仓库
  17. python实现单线程多任务非阻塞TCP服务端
  18. Rocketmq源码导入eclipse时报错的解决方法
  19. SQL中format()函数对应的格式
  20. spring jdbc连接数据库

热门文章

  1. (转)Hyper-v 安装CentOS 7 (其他虚拟机一样参考)
  2. vue获取v-on绑定事件的触发对象
  3. 2019牛客暑期多校训练营(第六场)C - Palindrome Mouse (回文自动机)
  4. ANTLR4 实验总结
  5. 凉经-乐糖游戏-PHP开发实习生
  6. DataFrame API应用案例
  7. HTML-lang属性规定元素内容的语言
  8. Mac004--Tomcat安装
  9. 《JAVA设计模式》之抽象工厂模式(Abstract Factory)
  10. Communications link failure mysql自动停止 连接拒绝 mysqld dead but sub。。。