確保一個特定的類只有一個對象被實例化。
Singleton:用于單線程應用程序
public class Singleton { private Singleton(){} //在自己內部定義自己一個實例,是不是很奇怪? //注意這是private 只供內部調用 private static Singleton instance = new Singleton(); //這里提供了一個供外部訪問本class的靜態方法,可以直接訪問 public static Singleton getInstance() { return instance; } } |
Double-Checked Locking:用于多線程應用程序
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次 //使用時生成實例,提高了效率! if (instance==null) instance=new Singleton(); return instance; } } |
Double-Checked Locking在java實際上無法得到預期的效果,不能保證singleton的正確性。
參考:(英文)
http://gee.cs.oswego.edu/dl/cpj/jmm.htmlhttp://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html?
posted on 2006-07-18 10:56
保爾任 閱讀(602)
評論(0) 編輯 收藏 所屬分類:
Design Patten