1. 程式人生 > >java-多線程下的單例模式

java-多線程下的單例模式

餓漢式 return ret div 解決 有一個 必須 懶漢式 修改

/*
多線程下的單例-懶漢式會有多線程問題
餓漢式不會有多線程問題
*/

//餓漢式

class Single {
    private static final Single s = new Single(); //final修改的變量必須要顯示初始化
    private Single() {}  //構造函數私有化不讓外界創建對象
    public static Single getInstance() { //外界不能創建對象,那麽需要對外提供公共的訪問方式--封裝的思想(隱藏實現細節,對外提供公共的訪問方式)
        return s;
    }
}


//懶漢式
class Single2 {
    
private static Single2 s = null; private Single2() {} public static Single2 getInstance() { if (s == null) { //加入雙重判斷為了解決效率問題,只要有一個線程創建完對象後,其他線程就不需要判斷鎖操作了提高效率 synchronized(Single2.class) { if (s == null) { s = new Single2(); } } }
return s; } }

java-多線程下的單例模式