老關(guān)者,吾同學(xué)也。哈哈,今天看他的博客,對單態(tài)模式又有了進(jìn)一步的理解。
以前使用的單態(tài)模式,也能實(shí)現(xiàn),不過有個限制,看下面的代碼
import java.util.*;
class Singleton
{
private static Singleton instance;
private Singleton()
{
}
public static Singleton getInstance()
{
if (instance == null) //1
instance = new Singleton(); //2
return instance; //3
}
}
這就是我們常使用的單態(tài)模式。
現(xiàn)在,我們作一個假設(shè),如果兩個線程同時執(zhí)行此程序,都剛執(zhí)行完1,到2,還沒有之行,停住。
此時
thread1得到的instance是null
thread2得到的instance也是null
下面會如何呢?
顯然,兩個線程會分別創(chuàng)建和初始化一個new Singleton()對象。
那么,我們的單態(tài)還能實(shí)現(xiàn)單態(tài)的功能嗎?不能。
不過,這是個特例,只有在多線程程序,同時兩個或多個線程都執(zhí)行到1還沒有執(zhí)行2的時候才能出現(xiàn)。
也就是說,如果沒有實(shí)現(xiàn)方法的同步的話,上面的模式是不能保證生成一個實(shí)例的。如果是在非多線程的程序中就更不會出現(xiàn)這樣的問題。
但是,些程序是一個嚴(yán)密的工作。所以,程序要在任何情況和平臺下都是正確的。
希望,通過此文,你也能明白,為什么上面的單態(tài)模式是不安全的,為什么這種實(shí)現(xiàn)方法有生成多個實(shí)例的可能?
想更深入的理解,請參考
http://guanhw.blog.hexun.com/10653016_d.html|----------------------------------------------------------------------------------------|
版權(quán)聲明 版權(quán)所有 @zhyiwww
引用請注明來源 http://www.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2008-02-15 13:27
zhyiwww 閱讀(879)
評論(2) 編輯 收藏 所屬分類:
j2ee