转http://www.cnb
logs.com/coffee/archive/2011/12/05/inside-java-singleton.html
1、如果单例对象不大,允许非懒加载,可以
使用方法三。
方法三
/**
* 预先初始化static变量 的
单例模式 非Lazy
线程安全
* 优点:
* 1、
线程安全
* 缺点:
* 1、非懒加载,如果构造的单例很大,构造完又迟迟不使用,会导致资源浪费。
*
* @author laichendong
* @since 2011-12-5
*/
public
class SingletonFour {
/** 单例变量 ,static的,在类加载时进行初始化一次,保证线程安全 */
private static SingletonFour
instance = new SingletonFour();
/**
* 私有化的构造方法,保证外部的类不能通过
构造器来实例化。
*/
private SingletonFour() {
}
/**
* 获取单例对象实例
*
* @return 单例对象
*/
public static SingletonFour getInstance() {
return instance;
}
}
如果需要懒加载,推荐使用方法四。
方法四:使用内部类。
/**
* 基于内部类的单例模式 Lazy 线程安全
* 优点:
* 1、线程安全
* 2、lazy
* 缺点:
* 1、待
发现
*
* @author laichendong
* @since 2011-12-5
*/
public class SingletonFive {
/**
* 内部类,用于实现lzay机制
*/
private static class SingletonHolder{
/** 单例变量 */
private static SingletonFive instance = new SingletonFive();
}
/**
* 私有化的构造方法,保证外部的类不能通过构造器来实例化。
*/
private SingletonFive() {
}
/**
* 获取单例对象实例
*
* @return 单例对象
*/
public static SingletonFive getInstance() {
return SingletonHolder.instance;
}
}