设计模式之 Singleton 单例模式
2024-09-15 13:53:44
先上两段代码,区别仅在于是否涉及线程安全。
首先是不涉及多线程的单例:
public class Singleton {
private final static Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() {
return INSTANCE;
}
}
double check版的单例,线程安全:
public class Singleton {
private static volatile Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() {
if(INSTANCE == null){
synchronized(Singleton.class){
if(INSTANCE == null){
INSTANCE = new Singleton();
}
}
}
return INSTANCE;
}
}
1.单例的构造和指向单例的静态成员是私有的
2.单例的对外接口是共有的,一般是getInstance或者create之类的静态函数
3.单例成员可以在变量声明时创建,也可以在公共接口getInstance中创建,具体看应用场景
4.非多线程环境下不需要double check,不必过度使用模式
最新文章
- JAVA操作Oracle数据库中的事务
- iOS-程序发布-32位和64位系统的兼容
- (转)战斗bug技巧全攻略
- TCP_NODELAY详解
- Game of Connections
- PAT1118. Birds in Forest (并查集)
- Jmeter性能测试 如何利用SQLserver造出大批的数据
- 使用quaggaJS识别图片中的条形码
- vue 二三倍图适配,1像素边框
- Web Penetration Testing w3af fierce
- Scala断言
- 关于js中的回调函数callback
- 卸载JLink驱动弹出“could not open INSTALL.LOG file”的解决方法
- jquery去掉click事件
- 纯javascript实现选择框的全选与反选
- dubbo 微服务
- spark1.统计句子中特定内容
- 一文彻底明白linux中的selinux到底是什么
- 命令注入工具Commix
- mysql中的存储引擎
热门文章
- POJ 3074 Sudoku (Dacing Links)
- Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序
- cuda(1) 最大并发量
- Tomcat内存不足的解决办法
- Java 并发包中的读写锁及其实现分析
- codeforces 714C解题报告
- android设备连接不上电脑的解决方法
- 第一个小项目(天气预报软件)——称";酷狗天气";
- C++:复制构造函数在什么时候被调用?
- JMeter入门(4):Java Request实例