單例問題與執行緒安全

2021-08-15 11:25:51 字數 731 閱讀 6741

沒有執行緒安全性問題

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,以避免兩個列...