首页 > 其他 > 详细

单例模式

时间:2017-02-27 19:15:59      阅读:245      评论:0      收藏:0      [点我收藏+]

单例模式

单例模式确保其某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。这个类叫做单例类。特点:

1.单例类只能有一个实例

2.单例类必须自己创建自己唯一的实例。

3.单例类必须给其他所有对象提供这一实例。

 

饿汉式

用不用都先创建单例类

 1 public class EagerSingleton {
 2     private static EagerSingleton esl = new EagerSingleton();
 3     
 4     private EagerSingleton(){
 5     }
 6     
 7     public static EagerSingleton getInstance(){
 8         return esl;
 9     }
10 }

 

这种写法不会引发线程安全问题。

 

懒汉式

使用时才去创建

 1 public class LazySingleton {
 2     private static LazySingleton ls = null;
 3     
 4     private LazySingleton(){
 5         
 6     }
 7     
 8     public static LazySingleton getInstance(){
 9         if(ls == null){
10             return new LazySingleton();
11         }
12         return ls;
13     }
14 }

 

 这种写法基本不用,因为是线程不安全的。线程A执行到第9行,然后切换B线程,B线程执行到第9行,也是ls==null,那么两个线程创建了两个对象,这样会出现问题。

 

双检锁

双检锁(DCL),是懒汉式的改进方式。

 1 public class DoubleCheckSingleton {
 2 
 3     private static DoubleCheckSingleton dcs = null;
 4     
 5     private DoubleCheckSingleton(){
 6         
 7     }
 8     
 9     public static DoubleCheckSingleton getInstance(){
10         if(dcs == null){
11             synchronized (DoubleCheckSingleton.class) {
12                 if(dcs == null){
13                     dcs = new DoubleCheckSingleton();
14                 }
15             }
16             
17         }
18         return dcs;
19     }
20     
21 }

 

很明显双检锁是安全的。

 

单例应用

 1 public class Runtime {
 2     private static Runtime currentRuntime = new Runtime();
 3 
 4     /**
 5      * Returns the runtime object associated with the current Java application.
 6      * Most of the methods of class <code>Runtime</code> are instance 
 7      * methods and must be invoked with respect to the current runtime object. 
 8      * 
 9      * @return  the <code>Runtime</code> object associated with the current
10      *          Java application.
11      */
12     public static Runtime getRuntime() { 
13     return currentRuntime;
14     }
15 
16     /** Don‘t let anyone else instantiate this class */
17     private Runtime() {}
18 
19     ...
20 }

 

 

单例好处

1.控制资源的使用

2.控制资源的产生

3.控制数据的共享

 

单例模式

原文:http://www.cnblogs.com/tp123/p/6475450.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!