新手谈设计模式 - 单例模式

单例模式 不少都会写 面试的时候也常常问 因而乎顺手就写了一个面试

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;
	}

}

原来单例也不简单啊,虽然如今本身手写很少 不少都用框架来代替了但本身设计一些底层编写时仍是会用到设计

相关文章
相关标签/搜索