`

单例模式(懒汉模式)中的线程同步问题

 
阅读更多

在单例懒汉设计模式中,当有多个线程访问getInstance方法时会出现线程安全问题:解决方法如下:

/**
 * 懒汉式单例模式中的线程访问安全问题
 * 
 * 1.当有多个线程同时访问getInstance方法获得对象时,可能会出现访问资源的错误,所以需要在里面加上动态锁
 * 2.由于getInstance方法是静态方法,所以同步锁为Single.class
 * 3.加上同步代码块之后可能会导致程序的效率降低,在同步代码块外面判断一次s是否为空。
 * @author Yxx
 *
 */
public class Single {
	private Single(){}
	private static Single s = null;
	private  static Single getInstance() throws InterruptedException{
		if(s==null){
			synchronized (Single.class) {
				if(s==null){
					Thread.sleep(10);
					 s = new Single(); 
				}
			}
		}
		return s;
	}
}


分享到:
评论

相关推荐

    单例模式的多种实现.docx

    3.4懒汉式(线程安全,使用同步方法) 9 3.5双重检查实现单例模式 10 3.6使用静态内部类实现单例模式 12 3.7使用枚举类实现单例模式 13 4.单例模式怎么用才合理? 14 4.1测试 14 4.2无边界 15 5.设计模式学习总结: ...

    单例模式,属于创建类型的一种常用的软件设计模式 通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中

    懒汉式—线程安全:加上synchronize之类保证线程安全的基础上的懒汉模式,相对性能很低,大部分时间并不需要同步 饿汉方式。指全局的单例实例在类装载时构建。 [2] 双检锁式。在懒汉式基础上利用synchronize关键字和...

    单例模式详解

    Java设计模式-单例模式详解,包含三种模式式:饿汉,懒汉,登记式,以及线程多同步的处理

    一个单例模式的晋级过程(饿汉-懒汉-DCL-IoDH-枚举)

    懒汉式优化-加锁同步3.DCL双检锁/双重校验锁重排序问题多线程执行时序表volatile 作用优化-基于volatile 的双重检查锁4.IODH按需初始化持有者反射问题私有构造函数异常处理5.枚举实现单例使用推荐 什么是单例? 单例...

    Java中线程同步和线程协作学习笔记

    java核心技术-多线程的概念及多线程单例设计模式的应用-懒汉模式、饿汉模式、优化懒汉

    C++线程安全问题及解决方法,C++智能指针

    通过原子操作、线程同步如互斥锁、读写锁、条件变量、信号量等方法解决C++线程安全问题。同时介绍了线程安全的单例,饿汉模式和懒汉模式。对于C++智能指针作出了简要介绍。同时整理了相关的例子帮助理解。适用人群:...

    designer_pattern.rar

    详细,简单易懂的单例模式源码,使用简单易懂的源码对单例模式的八种写法进行详解,包括:饿汉式(静态常量);饿汉式(静态代码块);懒汉式(线程安全);懒汉式(不加锁线程不安全);懒汉式(同步方法,线程安全)...

    Java学习路线:day19

    多线程线程的生命周期线程的同步同步代码块处理实现Runnable的线程安全问题同步代码块处理继承Thread类的线程安全问题同步方法处理实现Runnable的线程安全问题同步方法处理继承Thread类的线程安全问题线程安全的单例...

    day020-继承加强和设计模式代码和笔记.rar

    懒汉模式:懒加载模式 (优化方式:双重校验锁) 优点:节省资源,在需要的时候创建对象。 缺点:线程不安全。获取对象的时候,效率低 最简单的线程安全的方式:同步方法,效率低 更好的的...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

Global site tag (gtag.js) - Google Analytics