线程安全的单例模式
来源:互联网 发布:js创建二维数组 编辑:程序博客网 时间:2024/06/03 19:33
1.双重检查加锁
2.volatile
public class Singleton {private static volatile Singleton instance;private Singleton(){}public static Singleton getInstance(){if (instance == null) {synchronized(Singleton.class){if (instance == null) {instance = new Singleton();}}}return instance;}}
备注:1).未添加修饰符volatile时,在一个线程进入同步锁,创建对象时,可能会造成另外的线程拿到一个不为null但是未初始化的instance。这是因为创建一个对象可分为三步:
//1:分配对象的内存空间
//2:初始化对象
//3:设置instance指向刚分配的内存地址
JAVA允许单线程内不会改变单线程程序执行结果的重排序的发生。也就是说,在单线程内,只要保证访问instance时instance已经初始化,那么3是有可能先于2发生的。
2).volatile具有内存可见性,也就是说一个线程可以读到任意其他线程对该属性的最后写入。
参考文献:http://ifeve.com/double-checked-locking-with-delay-initialization/ //双重检查锁定及延迟初始化
http://www.infoq.com/cn/articles/java-memory-model-4/ //volatile
0 0
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- Volatile 线程安全的单例模式
- 线程安全的单例模式
- 基于线程安全的单例模式
- 线程安全的单例模式
- 单例模式的线程安全
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式 [老生常谈]
- java线程安全的单例模式
- 线程安全的单例模式
- + 线程安全的单例模式
- vim文本编辑器的使用
- ZeroClipboard实现兼容各浏览器复制功能一款jquery插件
- android安全添加新版本中的代码
- Bug系列----打电话过程中重启
- virtualbox 内部网络桥接配置
- 线程安全的单例模式
- Hibernate学习笔记--导航
- 查看android api的网址,速度非常快
- 最重要的工作是招聘人才,在多的战略也无法替代人才
- Unity中HideInInspector和SerializeField
- 通过网卡远程开启PC
- 初识软件定义存储
- iOS arc 内存管理
- java Map及Map.Entry详解及用途