新手谈设计模式

隐身守侯 提交于 2020-04-07 01:48:37

单例模式 很多都会写 面试的时候也经常问 于是乎顺手就写了一个

public class Singleton {
	private static Singleton singleton = new Singleton();
	private Singleton(){}
	public static Singleton getSingleton(){
		return singleton;
	}
}

由于这种启动加载,为了减小负载需要延迟加载 于是有了

public class Singleton {
	private static Singleton singleton = null;
	private Singleton(){}
	public static Singleton getSingleton(){
		if(singleton == null)
			singleton = new Singleton();
		return singleton;
	}
}

确实延迟加载了 但如果多线程的话 是不是可能出现多个了呢

于是我们考虑线程安全 进行加锁

public class Singleton {
	private static Singleton singleton = null;

	private Singleton() {
	}

	public static Singleton getSingleton() {
		synchronized (Singleton.class) {

			if (singleton == null)
				singleton = new Singleton();
		}
		return singleton;
	}

}

但这样一想每次都要来进行锁判断 而单例一旦创建了后面就存在了不用进null判断了  这样效率是不是还可以提高一点

public class Singleton {
	private static Singleton singleton = null;

	private Singleton() {
	}

	public static Singleton getSingleton() {
		if (singleton == null)
			synchronized (Singleton.class) {

				if (singleton == null)
					singleton = new Singleton();
			}
		return singleton;
	}

}

原来单例也不简单啊,虽然现在自己手写不多 很多都用框架来代替了但自己设计一些底层编写时还是会用到

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!