基于双重检查锁定和类初始化(静态内部类)的单例模式

基于 双重检查锁定 的单例模式:

public class DoubleCheckedLockingSingleton{
    private static volatile DoubleCheckedLockingSingleton instance;
    public static DoubleCheckedLockingSingleton  getInstance(){
        if(instance == null)
            synchronized(DoubleCheckedLockingSingleton.class)
                if(instance == null)
                    instance = new DoubleCheckedLockingSingleton();
        return instance;
    }

基于 类的初始化(静态内部类) 的单例模式:

public class ClassInitSingleton{

    public static class Instance{
        public static Instance instance = new Instance();
    }

    public static Instance getInstance(){
        return Instance.instance;
    }

}

参考资料:

1、双重检查锁定与延迟初始化
http://www.infoq.com/cn/articles/double-checked-locking-with-delay-initialization#anch102163

说明:

《Java并发编程艺术》里就是使用的上面的这篇文章


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单例模式主要是为了确保一个只有一个实例,其实现方式一般有饿汉式和懒汉式两种。 饿汉式单例模式是在加载时就创建单例对象,无需任何判断或锁定操作,因此具有线程安全性。实现方式是将单例对象作为静态成员变量直接进行初始化,代码如下: ``` public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` 懒汉式单例模式则是在需要使用时才创建单例对象,相比饿汉式更加节约资源。但是需要考虑线程安全问题。常见的实现方式有双重校验和静态内部类双重校验利用同步锁保证对象只被创建一次,通过双重判断,减少了锁的开销。代码实现如下: ``` public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 静态内部类实现方式则是将单例对象作为静态成员内部,并在外部中提供静态方法获取内部对象,在需要使用时才进行加载。由于加载的线程安全性,所以这种方式可以保证对象的线程安全性。代码实现如下: ``` public class Singleton { private Singleton() {} private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值