`

单例模式

阅读更多
Java之美[从菜鸟到高手演变]之设计模式

Java开发中的23种设计模式详解

package cn.com.songjy;

public class Singleton {

	/* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
	private static Singleton instance = null;

	/* 私有构造方法,防止被实例化 */
	private Singleton() {
	}

	/* 静态工程方法,创建实例 ,非线程安全 */
	public static Singleton getInstance1() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}

	/* 静态工程方法,创建实例 ,线程安全(但不绝对,原因请参阅以上2个链接的说明,但针对其说明个人有保留意见) */
	public static Singleton getInstance() {
		if (instance == null) {
			synchronized (Singleton.class) {// 此处能否写成synchronized(instance),为啥???
				if (instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}

	/* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */
	public Object readResolve() {
		return instance;
	}
}


以下是绝对线程安全的单例模式,其缺点是没实现懒加载,大数据或大型项目中可能影响性能
package cn.com.songjy;

public class Singleton {
	
	private static final Singleton instance = new Singleton();
	
	private Singleton(){}
	
	public static Singleton getInstance(){
		return instance;
	}

}


静态方法加锁,和非静态方法加锁区别

java单例的几种实现方法
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics