單例模式的幾種實現
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 防止指令重排4. 餓漢式——執行緒安全(基於類載入機制保證)private static volatile lazysingleton instance;
public static lazysingleton getinstance()}}
return instance;
}
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;6. 列舉——執行緒安全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()
}
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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...