確保乙個類只有乙個例項,並提供乙個全域性訪問點。
package wfb.pattern;
public
class
singleton
public
static singleton getinstance()
return instance;
}}
package wfb.pattherntest;
import org.junit.test;
import wfb.pattern.singleton;
public
class
singletontest
@test
public
void
testsingleton2()
throws exception
catch
(interruptedexception e)
singleton singlon = singleton.
getinstance()
;}})
.start()
;}}}
單執行緒 :
多執行緒 :
如果多個執行緒同時走到if(instance == null)的判斷語句,會因為還未建立例項而進入到例項化**,從而導致了單件被例項化多次。換句話說,根本原因是if(instance == null) instance = new singleton()這兩步操作不是原子性的。
為此,我們有兩種解決方法:
1.在類載入後就初始化instance,之後就不在需要建立例項了。
2.用同步包起這兩步操作,從而使得它具有原子性。
懶漢和餓漢模式就這兩種方法分別給出了多執行緒下單例模式的解決方案。
package wfb.pattern;
//餓漢模式通過提前初始化乙個例項來解決多執行緒問題
//懶漢模式通過同步解決多執行緒問題。
java單例模式懶漢和餓漢
實現 1 公開靜態的對外訪問方法 2 私有的構造方法 保證不被外部呼叫 3 類載入時候建立物件 餓漢式 public class instance1 private static instance1 d new instance1 private instance1 public static in...
java單例模式 懶漢模式和餓漢模式
在類載入的時候不被初始化,類載入快.有執行緒安全問題,需要在 getinstance 方法加 synchronize 鎖.public class lazy 建立乙個私有的物件,但是不進行初始化 private static lazy lazy 得到自己的例項,判斷是否為空,為空則建立 public...
懶漢單例模式 和 餓漢單例模式
單例模式 是一種常用的軟體設計模式,在它的核心結構中值包含乙個被稱為單例的特殊類。乙個類只有乙個例項,即乙個類只有乙個物件例項。餓漢單例模式 public class singletondemo5 private singletondemo5 public static final singleto...