单例模式之懒汉的并发问题
来源:互联网 发布:九鼎彩社用的软件 编辑:程序博客网 时间:2024/05/29 11:11
饿汉模式:class Single{ private staitc final Single s= new Single(); private Single(){} public static Single getSingle(){ return s; }} 懒汉模式:class Single{ private static Single s= null; private Single(){} public static Single getSingle(){ if(s == null){ -->A线程 -->B线程 s = new Single(); return s; } }}
在这里使用懒汉模式有一个安全性问题:
就是s为共享数据,可能会并发的访问getSingle()方法。当多线程访问时,一个A线程进来后,可能调用了sleep()方法在这里沉睡;一个B线程也可能在沉睡,当A线程醒来后,就会new一个对象,B线程醒来也会new一个对象;这样就不符合我们单例模式的特点了。
解决方案:使用synchronized方法进行线程同步
另一个问题,当加了synchronized后,那么很多线程来访问时,都要判断一下锁是哪个,这就造成速率下降
解决方案:在synchronized方法后添加instance是否为null的判断,这样当下一个线程访问时发现instance非空后直接返回前面线程实例化后的对象
public staitc Single getSingle(){ if(s == null){ synchronized(Single.class){ -->B线程,等着A解锁才让进去 if(s == null){ -->A线程 s = new Single(); } } return s; }}
阅读全文
0 0
- 单例模式之懒汉的并发问题
- 单例模式之懒汉的并发问题
- 单例模式之懒汉的并发问题,只需要添加一个 synchronized 就可以解决了
- 单例模式之懒汉模式的线程安全解决方法
- 单例模式之懒汉模式
- 单例设计模式之懒汉模式
- 单例模式的懒汉式在多线程的问题
- 单例设计模式之安全的懒汉式
- 类的单例模式之懒汉式
- Java单例模式之懒汉式的深入了解
- 单例模式之懒汉式
- 单例设计模式之懒汉式
- 单例模式之懒汉与饿汉式
- 单例模式之懒汉式
- Java单例模式之懒汉
- 懒汉单例模式
- 单例设计模式中懒汉式并发访问的安全问题
- Java——单例设计模式中懒汉式并发访问的安全问题
- (M)Dynamic Programming: 413. Arithmetic Slices
- 伪类三角形
- 史上最全量化交易资源整理
- Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0
- mac OSX10.12 sierra 安装python-ldap报missing sasl.h错误
- 单例模式之懒汉的并发问题
- Java 数据结构
- 87.乱串追源
- Codeforces 863DYet Another Array Queries Problem
- 为什么V8引擎这么快?
- bzoj 2212(线段树合并)
- 干货 | 深度学习之DNN的多种正则化方式
- gradle镜像文件地址
- java闪屏类