当前位置:首页 > 开发 > 编程语言 > Java > 正文

java中单例的五种写法

发表于: 2014-03-28   作者:liuxiaoling   来源:转载   浏览:
摘要: /** * 单例模式的五种写法: * 1、懒汉 * 2、恶汉 * 3、静态内部类 * 4、枚举 * 5、双重校验锁 */ /** * 五、 双重校验锁,在当前的内存模型中无效 */ class LockSingleton { private volatile static LockSingleton singleton; pri
/**
 * 单例模式的五种写法:
 * 1、懒汉
 * 2、恶汉
 * 3、静态内部类
 * 4、枚举
 * 5、双重校验锁
 */
/**
 * 五、 双重校验锁,在当前的内存模型中无效
 */
class LockSingleton
{

    private volatile static LockSingleton singleton;

    private LockSingleton()
    {
    }

    public static LockSingleton getInstance()
    {
        if (singleton == null)
        {
            synchronized (LockSingleton.class)
            {
                if (singleton == null)
                {
                    singleton = new LockSingleton();
                }
            }
        }
        return singleton;
    }

}

/**
 * 四、枚举,《Effective Java》作者推荐使用的方法,优点:不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象
 */
enum EnumSingleton
{
    INSTANCE;

    public void doSomeThing()
    {
    }
}

/**
 * 三、静态内部类 优点:加载时不会初始化静态变量INSTANCE,因为没有主动使用,达到Lazy loading
 */
class InternalSingleton
{

    private static class SingletonHolder
    {
        private final static InternalSingleton INSTANCE = new InternalSingleton();
    }

    private InternalSingleton()
    {
    }

    public static InternalSingleton getInstance()
    {
        return SingletonHolder.INSTANCE;
    }
}

/**
 * 二、恶汉,缺点:没有达到lazy loading的效果
 */
class HungrySingleton
{

    private static HungrySingleton singleton = new HungrySingleton();

    private HungrySingleton()
    {
    }

    public static HungrySingleton getInstance()
    {
        return singleton;
    }
}

/**
 * 一、懒汉,常用的写法
 */
class LazySingleton
{

    private static LazySingleton singleton;

    private LazySingleton()
    {
    }

    public static LazySingleton getInstance()
    {
        if (singleton == null)
        {
            singleton = new LazySingleton();
        }
        return singleton;
    }
}

 

java中单例的五种写法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号