單例模式(懶漢和餓漢)day07

package com.xujy.thread;

public class SingleTone {
    public static void main(String[] args) {
        Single s1=Single.getInstance();
        Single s2=Single.getInstance();
        System.out.print(s1==s2);
        Single1 s3=Single1.getInstance();
        Single1 s4=Single1.getInstance();
        System.out.print(s3==s4);
    }

}
//懶漢模式(開始的時候不創建對象,調用的時候再創建實例對象),如果使用多線程的話會出現問題,可能兩個線程都進入了判斷語句導致
//創建了多個對象,可以採取添加同步鎖的方式來保證線程安全
 class Single{
     private static Single single=null;//構建私有的成員類變量並賦值爲null
     private Single(){}//構造器私有化,不允許在其他類裏創建new出該類的對象
     public static Single getInstance(){//聲明爲public在其他類裏可以調用該方法來實例化對象;static可以類名直接調用該方法來實例化對象。
      if(single==null){//提高效率,第一個線程進去之後,對象不爲空之後,其它線程就不會等待
         synchronized (Single.class) {//效率比較低,當一個線程進去之後,其它線程依然會等待進入
          if(single==null){
                 single=new Single();
             }
         }
      }    
         return single;
     }
     
 }
 
 
 //餓漢模式
 class Single1{
     private static Single1 s1=new Single1();//開始就創建一個對象,並且該對象是私有的
     private Single1(){}//構造器私有化,不允許該類在創建對象
     public static Single1 getInstance(){
        return s1;
     }
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章