您的位置:首页 > 其它

懒汉模式与饿汉模式

2012-08-02 23:08 225 查看
饿汉模式:加截类的时候就创建对象

class Single{

      private Single(){}

      private  static Single s = new Single();

      pubic static Single getInstance(){

          return s;

    }

}


懒汉模式:调用getInstance()方法时才创建对象

class Single{

     private Single(){}

     private static Single s = null;

     public static Single getInstance(){       //不在这里使用静态锁,因为如果在这里锁,每次获取对象都要判断锁,效率低

          if(s==null){                                           //只有对象不为空的时候才判断锁,提高了效率

                synchronized(Single.class){      //以当前类的字节码对象为锁

                        if(s==null){

                               s = new Single();  

                        }

                } 

         }

    }

}


从上面可以看出,懒汉模式虽然实现了延迟加载,但会导致线程同步的问题。为了实现同步,不得不加同步锁。

如果直接在方法上加synchronized锁,每次调用时都要判断锁,效率比较低。所以采用上面代码的方法实现同

步。但这样使代码繁琐了不少,所以通常情况下还是用饿汉模式创建单例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: