线程安全的Singleton要点
2024-10-07 01:06:14
1、privat static Singleton 要加votatile关键字修饰,防止对象的初始化代码与引用赋值代码进行重排序。
2、getInstance方法,最外层要加if (instance == null),然后加锁synchronized,然后再加if (instance == null)的判断
3、内层if (instance == null) 判断的作用是,如果没有这个内层的判断,多个线程都进入了外层的if (instance == null) 判断,并在锁的地方等待,那么势必会依次创建N个重复的对象,不是单例了。
示例代码如下:
public class Singleton { // 通过volatile关键字的使用,防止编译器将
// 1、初始化对象,2、给对象引用赋值
// 这两步进行重排序
private static volatile Singleton instance = null; private Singleton() { } public static Singleton getInstance() {
if (instance == null) {
synchronized (instance) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
} }
最新文章
- WCF学习之旅—WCF第二个示例(七)
- ARCGIS如何进行可视域分析
- task9暂存
- Android自定义控件2--优酷菜单界面初始化
- java中string stringbuilder stringbuffer 的区别
- 加密方式&;数字签名
- adId、idfv
- Scrum 项目5.0
- js中arguments,caller,callee,apply的用法小结
- Linux 内存布局
- Cocos2d-x 重写draw方法绘制直线等图形时被遮挡覆盖问题的一种解决方案
- 图片上没有line-height垂直居中
- eclipse 手动安装皮肤
- CSS Text文本格式
- 高逼格的实现WiFi共享,不安装第三方wifi共享软件,两种方式实现开启wifi的功能
- vc++ ODBC
- 读Kafka Consumer源码
- HashMap浅入理解
- Linux配置中文输入法(搜狗输入法)
- 初试GH-OST(转)
热门文章
- IEDA 实现自动生成序列化号(serialVersionUID)
- Python——作业12(选做)选中矩阵的每行或每列画出对应的折线图(python programming)
- 2019.11.18【每天学点SAP小知识】Day4 - ABAP 7.40新语法 FOR
- xaml 中 引用嵌套类的对象
- 非UI线程更新UI界面的各种方法小结
- 【AMAD】splinter -- 用于测试web app的python框架
- Samba简单应用
- comodo firewall 科莫多离线安装
- 【0.3】mysql复制的日常管理维护,mysql复制常见问题处理
- C/C++的几个输入流