码迷,mamicode.com
首页 > 其他好文 > 详细

2016/11/17

时间:2016-11-18 09:45:04      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:饿汉   创建   nal   线程安全   利用   stat   调用   解决办法   存在   

1.单例设计模式

(1)懒汉模式

 1 public class Singleton {
 2 
 3     private Singleton() {}
 4     private static Singleton singleton = null;
 5    // 这里可以加同步锁解决线程安全问题  
 6     public static Singleton getInstance() {
 7         if(singleton == null) {
 8             singleton = new Singleton();
 9         }
10         return singleton;
11     }
12 }

 

(2)饿汉模式

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

懒、饿汉之间的比较

(1)加载时机

  懒汉:懒汉很懒,只有当调用getInstance()方法时,才会初始化这个实例类

  饿汉:饿汉很饥饿,类一旦加载,实例就初始化完成,保证在调用getInstance()方法时,单利是已经存在的

(2)线程安全性

  懒汉:线程不安全.并发环境下很可能出现多个Singleton实例.解决办法是可以添加同步锁

  饿汉:饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题

 (3) 资源加载和性能:

  懒汉:延迟加载,第一次调用时才会初始化,性能上会有所延迟.

  饿汉:类创建的同时就实例化一个静态对象,不论之后是否用到这个对象,都已初始化并占用一定的内存.第一次调用个时候相对较快.

 (4)  懒汉设计模式线程安全问题的解决方案

利用了classloader的机制来保证初始化instance时只有一个线程,所以也是线程安全的,同时没有性能损耗

 1 public class SafeSingleton {
 2 
 3     public SafeSingleton() {
 4     }
 5     private static class LasyHolder{
 6         private static final SafeSingleton INSTANCE = new SafeSingleton();
 7     }
 8 
 9     public static final SafeSingleton getInstance(){
10         return LasyHolder.INSTANCE;
11     }
12 }

 

2016/11/17

标签:饿汉   创建   nal   线程安全   利用   stat   调用   解决办法   存在   

原文地址:http://www.cnblogs.com/ceder/p/6072822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!