单例模式之懒汉式

作者: admin 分类: 设计模式 发布时间: 2021-10-19 10:20 ė 6 没有评论
  • 懒汉式-非线程安全

非线程安全的懒汉模式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。
这种方式 lazy loading 很明显,不要求线程安全,在多线程不能正常工作。

package org.wenhui.singleton;

/**
 * 
 * @ClassName: Singleton1
 *
 * @Description: 单例模式之懒汉式-线程不安全
 *
 * @author: 王文辉
 *
 * @date: 2021年10月18日 下午2:23:03
 * 
 * @see www.wangwenhui.com.cn
 *
 */
public class Singleton1 {

	private static Singleton1 INSTANCE;

	private Singleton1() {
	}

	public static Singleton1 getInstance() {
		if (INSTANCE == null) {
			INSTANCE = new Singleton1();
		}
		return INSTANCE;
	}

}

  • 懒汉式-线程安全
  • 线程安全懒汉模式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。

    优点:第一次调用才初始化,避免内存浪费。
    缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。
    getInstance() 的性能对应用程序不是很关键(该方法使用不太频繁)。

    package org.wenhui.singleton;
    
    /**
     * 
     * @ClassName: Singleton2
     *
     * @Description:单例模式之懒汉式-线程安全
     *
     * @author: 王文辉
     *
     * @date: 2021年10月19日 上午10:16:35
     * 
     * @see www.wangwenhui.com.cn
     *
     */
    public class Singleton2 {
    	private static Singleton2 INSTANCE;
    
    	private Singleton2() {
    	}
    
    	public static synchronized Singleton2 getInstance() {
    		if (INSTANCE == null) {
    			INSTANCE = new Singleton2();
    		}
    		return INSTANCE;
    	}
    }
    

    本文出自王文辉的博客,转载时请注明出处及相应链接。

    本文永久链接: http://www.wangwenhui.com.cn/archives/31

    发表回复

    您的电子邮箱地址不会被公开。

    Ɣ回顶部