1. 程式人生 > >《Java多執行緒程式設計實戰》—— 第10章 Thread Specific Storage(執行緒特有儲存)模式

《Java多執行緒程式設計實戰》—— 第10章 Thread Specific Storage(執行緒特有儲存)模式

Thread Specific Storage模式:不共享變數,不使用鎖。
不同執行緒使用統一的訪問接入點可以獲取執行緒特有的例項。

弊端:

  • 隱藏了系統結構,隱藏了應用中各個物件之間的關係,從而使應用更加難於理解。
  • 鼓勵使用全域性物件。

常見使用場景

  • 需要使用非執行緒安全物件,但不希望引入鎖
  • 使用執行緒安全物件,但希望避免其使用鎖的開銷和相關問題
  • 隱式引數傳遞(但會使系統難於理解)
  • 特定於執行緒的單例模式:對於某個類,希望每個執行緒有且僅有該類的一個例項

執行緒池環境下使用該模式可能導致資料錯亂。需要在適當的時間和地方清理執行緒特有物件。——任務特有物件

記憶體洩露:物件永遠無法被垃圾回收導致佔用的JVM記憶體無法被釋放。
偽記憶體洩露:可能會被回收,也可能永遠無法被回收。
伺服器環境下使用執行緒特有物件模式需要注意記憶體洩露和偽記憶體洩露。(P140有更詳細的論述)伺服器內部維護一個執行緒池處理各個Web應用的請求,Web應用停止後,執行緒池中的各個工作者執行緒仍然存在
關鍵條件是:Web應用程式的類載入器持有對ThreadLocal例項的可達引用。

ThreadLocal通常使用static final修飾。