java单例对象

转http://www.cnblogs.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;
    }
   
}

你可能感兴趣的:(java,单例对象)