单例设计模式(Singleton)的优化
2024-10-07 13:15:38
单例模式的优化
单例模式懒汉式写法,单例模式的优化有以下四个方面:
- 使用同步保证线程安全synchronized
- 使用volatile关键字:volatile关键字提醒编译器后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。
- 防止反射调用私有构造方法
- 让单例序列化安全
代码实现
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;
}
}
最新文章
- 工厂方法模式——创建型模式02
- cmd命令查看局域网内计算机信息
- sqoop将关系型数据库的表导入hive中
- Tomcat_修改代码后tomcat是否需要重启
- CSS自定义弹出框
- android之费电检查 BetterBatteryStats
- 利用python进行数据分析 (学习笔记)
- 数往知来SQL SERVER 视图 触发器 <;九>;
- lintcode :nth to Last Node In List 链表倒数第n个节点
- HTML字符实体(Character Entities),转义字符串(Escape Sequence)
- V9最新手机门户域名绑定教程。
- Javascript:重用之道
- LCS算法思想
- wget多进程抓取的实现
- BZOJ 1951: [Sdoi2010]古代猪文( 数论 )
- 创建 github 仓库
- python实现单线程多任务非阻塞TCP服务端
- Rocketmq源码导入eclipse时报错的解决方法
- SQL中format()函数对应的格式
- spring jdbc连接数据库
热门文章
- (转)Hyper-v 安装CentOS 7 (其他虚拟机一样参考)
- vue获取v-on绑定事件的触发对象
- 2019牛客暑期多校训练营(第六场)C - Palindrome Mouse (回文自动机)
- ANTLR4 实验总结
- 凉经-乐糖游戏-PHP开发实习生
- DataFrame API应用案例
- HTML-lang属性规定元素内容的语言
- Mac004--Tomcat安装
- 《JAVA设计模式》之抽象工厂模式(Abstract Factory)
- Communications link failure mysql自动停止 连接拒绝 mysqld dead but sub。。。