三种Singleton的实现方式

简介: 来源:http://melin.iteye.com/blog/838258三种Singleton的实现方式,一种是用大家熟悉的DCL,另外两种使用cas特性来实现。 public class LazySingleton { private static vola...

来源:http://melin.iteye.com/blog/838258

三种Singleton的实现方式,一种是用大家熟悉的DCL,另外两种使用cas特性来实现。

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

 

    /** 
     * 利用putIfAbsent线程安全操作,实现单例模式 
     *  
     * @author Administrator 
     *  
     */  
    public class ConcurrentSingleton {  
        private static final ConcurrentMap<String, ConcurrentSingleton> map = new ConcurrentHashMap<String, ConcurrentSingleton>();  
        private static volatile ConcurrentSingleton instance;  
      
        public static ConcurrentSingleton getInstance() {  
            if (instance == null) {  
                instance = map.putIfAbsent("INSTANCE", new ConcurrentSingleton());  
            }  
            return instance;  
        }  
    }  

 

    public class AtomicBooleanSingleton {  
        private static AtomicBoolean initialized = new AtomicBoolean(false);  
        private static volatile AtomicBooleanSingleton instance;  
          
        public static AtomicBooleanSingleton getInstantce() {     
            checkInitialized();  
            return instance;     
        }  
          
        private static void checkInitialized() {  
            if(instance == null && initialized.compareAndSet(false, true)) {  
                instance = new AtomicBooleanSingleton();  
            }  
        }  
    }  

 

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

目录
相关文章
@Singleton和@ApplicationScoped的区别
在JakartaEE的CDI标准中@Singleton和@ApplicationScoped的区别
414 0
|
安全 C#
单例模式(Singleton)
单例模式(Singleton)
68 0
|
设计模式 存储 安全
C++的单例模式为什么不直接全部使用static,而是非要实例化一个对象?
C++的单例模式为什么不直接全部使用static,而是非要实例化一个对象?
498 1
C++的单例模式为什么不直接全部使用static,而是非要实例化一个对象?
单例模式(singleton)
转载 确保对象的唯一性——单例模式 (一)确保对象的唯一性——单例模式 (二)确保对象的唯一性——单例模式 (三)确保对象的唯一性——单例模式 (四)确保对象的唯一性——单例模式 (五)
924 0