`
wsmajunfeng
  • 浏览: 492098 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

(转)三种Singleton的实现方式

 
阅读更多

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

Java代码  收藏代码
  1. public class LazySingleton {     
  2.     private static volatile LazySingleton instance;     
  3.          
  4.     public static LazySingleton getInstantce() {     
  5.         if (instance == null) {     
  6.             synchronized (LazySingleton.class) {     
  7.                 if (instance == null) {     
  8.                     instance = new LazySingleton();     
  9.                 }  
  10.             }     
  11.         }     
  12.         return instance;     
  13.     }     
  14. }    


Java代码  收藏代码
  1. /** 
  2.  * 利用putIfAbsent线程安全操作,实现单例模式 
  3.  *  
  4.  * @author Administrator 
  5.  *  
  6.  */  
  7. public class ConcurrentSingleton {  
  8.     private static final ConcurrentMap<String, ConcurrentSingleton> map = new ConcurrentHashMap<String, ConcurrentSingleton>();  
  9.     private static volatile ConcurrentSingleton instance;  
  10.   
  11.     public static ConcurrentSingleton getInstance() {  
  12.         if (instance == null) {  
  13.             instance = map.putIfAbsent("INSTANCE"new ConcurrentSingleton());  
  14.         }  
  15.         return instance;  
  16.     }  
  17. }  


Java代码  收藏代码
  1. public class AtomicBooleanSingleton {  
  2.     private static AtomicBoolean initialized = new AtomicBoolean(false);  
  3.     private static volatile AtomicBooleanSingleton instance;  
  4.       
  5.     public static AtomicBooleanSingleton getInstantce() {     
  6.         checkInitialized();  
  7.         return instance;     
  8.     }  
  9.       
  10.     private static void checkInitialized() {  
  11.         if(instance == null && initialized.compareAndSet(falsetrue)) {  
  12.             instance = new AtomicBooleanSingleton();  
  13.         }  
  14.     }  
  15. }  

分享到:
评论

相关推荐

    java面试宝典

    75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private ...

    java三大框架

    在此基础之上,Spring提供了AOP(Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实 现J2EE的应用;DAO...

    asp.net知识库

    C#2.0 Singleton 的实现 .Net Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 从NUnit中理解.NET自定义属性的应用...

    JAVA面试题最全集

    除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39....

    超级有影响力霸气的Java面试题大全文档

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...

    java 面试题 总结

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...

    千方百计笔试题大全

    75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private ...

    spring.net中文手册在线版

    14.7.选择编程方式还是声明方式 第十五章. 数据访问对象 15.1.简介 15.2.统一的异常体系 15.3.为数据访问对象提供的统一抽象基类 第十六章. DbProvider 16.1.简介 16.1.1.IDbProvider和DbProviderFactory 16.1.2. ...

    java基础题 很全面

    解析XML文档有哪几种方式? 12 49. 你在项目中用到了xml技术的哪些方面?如何实现的? 12 50. 简述synchronized和java.util.concurrent.locks.Lock的异同 ? 13 51. 排序都有哪几种方法?请列举。用JAVA实现一个快速排序...

    Java面试宝典2010版

    1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 3、存储过程与触发器必须讲,经常被面试到? 4、数据库三范式...

    最新Java面试宝典pdf版

    1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 91 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 91 3、存储过程与触发器必须讲,经常被面试到? 92 4、数据库...

    Java面试笔试资料大全

    1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 91 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 91 3、存储过程与触发器必须讲,经常被面试到? 92 4、数据库...

    net学习笔记及其他代码应用

    10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m [Page] 答: int Num = this.TextBox1.Text.ToString() ; int Sum = 0 ; for (int i = 0 ; i ; i++) { if((i%2) == 1) { Sum += i ; ...

    Java面试宝典-经典

    1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 91 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 91 3、存储过程与触发器必须讲,经常被面试到? 92 4、数据库...

    JAVA面试宝典2010

    1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 91 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 91 3、存储过程与触发器必须讲,经常被面试到? 92 4、数据库...

    java面试题大全(2012版)

    1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 91 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 91 3、存储过程与触发器必须讲,经常被面试到? 92 4、数据库...

    Java面试宝典2012版

    1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 91 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 91 3、存储过程与触发器必须讲,经常被面试到? 92 4、...

    java面试宝典2012

    1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 99 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 100 3、存储过程与触发器必须讲,经常被面试到? 101 4、...

    Java面试宝典2012新版

    1、用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息。 91 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 91 3、存储过程与触发器必须讲,经常被面试到? 92 4、数据库...

Global site tag (gtag.js) - Google Analytics