沒有執行緒安全性問題
public class singletondemo2
public static singletondemo2 getinstance()
return instance; }
}
如果遇到多執行緒。上面的**會返回不同的 singletondemo2 例項。違背了單例設計。
需要加上 synchronized 關鍵字。如下:
public synchronized static singletondemo2 getinstance()
return instance;
}
雖然解決了 「
返回不同的
synchronized 放在靜態方法上,內建鎖就是當前類的class位元組碼物件,當一些偏向鎖,輕量級鎖過來的時候,都會失去它們效能優勢,變成像 重量級鎖一樣。因而還不是最好的方法,需要改進。
最終版本:
public class singleton2
//volatile 防止jvm 指令重排序
private static volatile singleton2 instance;
public static singleton2 getinstance()
}} return instance;
}}
單例模式與執行緒安全
請看如下的單例類 class singleton return singleton 首先判斷singleton是否為null,如果是就建立singleton物件,否則直接返回singleton。但是判斷和建立並非原子操作,假設執行緒1正在執行null singleton,判斷為true,準備執行下一...
單例模式與執行緒安全
在類載入的時候,就已經進行例項化,無論之後用不用到。如果該模擬較佔記憶體,之後又沒用到,就白白浪費了資源。public class hungersingleton private hungersingleton public static void main string args start 在需...
單例模式與執行緒安全
概念 單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,以避免兩個列...