线程安全单例模式

曾去腾讯公司面试,给这题卡了,他们要的是最优最优,好吧,来个最优饿汉式线程安全单例模式:

package com.esom.tech.pattern;

/**
 * 线程安全单例模式
 */
public class Singleton {
	private static Singleton instance;

	private Singleton() {}

	public static Singleton getInstance() {
		if (instance == null) {
			/**
			 * 对象的创建线程安全,而不是对象的获取 
			 * 故不对getInstance方法做线程同步
			 */
			synchronized (Singleton.class) {
				// 加null比较判断,避免多个线程同步等待后获取不同实例
				if (instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
}

相关推荐