2009-12-03 46 views
1

我使用的是ThreadLocal變量(通過Clojure的變量,但以下內容與Java中的原始ThreadLocal相同),並且經常遇到以下問題:我無法確定某個代碼路徑將採取同一個線程或另一個線程。對於我的控制下的代碼來說,這顯然不是一個太大的問題,但對於多態第三方代碼,有時甚至沒有辦法靜態確定是否安全地假設單線程執行。難以使用的ThreadLocals

我傾向於認爲這是一個固有的問題ThreadLocal s,但我想聽聽一些建議如何以安全的方式使用它們。

+2

你的代碼和具體問題在哪裏? – 2009-12-03 14:32:02

+0

如果你的官僚本能告訴你這是社區wiki,請隨意標記我的問題。 – pmf 2009-12-03 14:46:16

+0

我不明白這個問題,ThreadLocal與多線程代碼一起使用。如果你可以假設單線程執行使用局部變量... – pgras 2009-12-03 15:22:51

回答

9

然後不要使用ThreadLocals!當你想要一個與Thread相關的變量時,它們特別適用於你,就好像有一個Map<Thread,T>

+0

答案很簡單!我會爲你+1,但不幸的是我今天的選票全部沒有了。 – Bombe 2009-12-03 14:37:46

0

ThreadLocal的典型用例(據我所知)是在一個Web應用程序框架中。 HTTP篩選器在傳入請求上獲取數據庫連接,並將連接存儲在靜態ThreadLocal中。所有後續需要連接的控制器都可以使用靜態調用從框架輕鬆獲得。當返回響應時,同一個過濾器再次釋放連接。