設計模式 單例模式

2021-10-06 06:52:16 字數 2539 閱讀 4371

單例模式的幾種實現

1. 懶漢式——多執行緒執行緒安全

package main.base.test.day20200518;

public class lazysingleton catch (interruptedexception e)

system.out.println("thread:"+thread.currentthread().getname()+" || "+lazysingleton.getinstance());

}).start();}}

//構造器私有化

private lazysingleton()

//私有化靜態變數

private static lazysingleton instance;

//全域性訪問方法

public static lazysingleton getinstance()

return instance;}}

懶漢式在多執行緒下執行緒不安全

2. 懶漢式改進:加 sysnchronized (同步方法)——多執行緒執行緒安全

//全域性訪問方法

3. 懶漢式改進:雙端校驗鎖機制——多執行緒執行緒安全

instance = new lazysingleton();  在 即時編譯、cpu優化 階段可能被指令重排,加 volatile 防止指令重排

//私有化靜態變數-加 volatile 防止指令重排

private static volatile lazysingleton instance;

public static lazysingleton getinstance()}}

return instance;

}

4. 餓漢式——執行緒安全(基於類載入機制保證)

package main.base.test.day20200518;

public class hungrysingleton catch (interruptedexception e)

system.out.println("thread:" + thread.currentthread().getname() + " || " + hungrysingleton.getinstance());

}).start();}}

//構造器私有化

private hungrysingleton()

//私有的靜態成員變數

private static hungrysingleton instance = new hungrysingleton();

//全域性呼叫的方法

5.靜態內部類方式——執行緒安全(基於類載入機制保證-延遲載入,呼叫時載入)

package main.base.test.day20200518;

public class innerclasssingleton catch (interruptedexception e)

system.out.println("thread:" + thread.currentthread().getname() + " || " + innerclasssingleton.getinstance());

}).start();}}

//構造器私有化

private innerclasssingleton()

//私有靜態成員變數

private static innerclasssingleton instance;

//私有靜態內部類

private static class innerclass

//全域性的靜態方法

public static innerclasssingleton getinstance()

}

6. 列舉——執行緒安全

package main.base.test.day20200518;

public enum enumsingleton

class enumtest catch (interruptedexception e)

system.out.println("thread:" + thread.currentthread().getname() + " || " + enumsingleton.intance.hashcode());

}).start();}}

}

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...

設計模式 單例模式

單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...