2017-02-17 26 views
1

我們可以像ThreadLocal的方式那樣獲取對Thread的成員變量的引用嗎?ThreadLocal與Java中線程中的成員變量

例如,假設我們使用一個計數器變量來對付由ThreadLocal變量中的Thread處理的請求的數量。考慮我們正在使用ThreadPool執行器來重用線程。現在每個線程都保持對ThreadLocal計數器變量的引用,並且可以在每次請求後增加自己的副本。 以類似的方式,如果我有一個Runnable中的成員變量,我可以找回它的引用嗎?線程無論如何被重用。

回答

1

如果我有一個Runnable中的成員變量,我可以找回它的引用嗎?

當您說「可運行」時,您正在討論實現Runnable接口的某個對象。關於Runnable沒有任何魔力,關於run()方法沒有什麼魔力。

Runnable對象的成員變量就像任何其他對象的成員變量一樣,並且您的代碼以相同的方式訪問它們。


PS,通常情況下,當你在程序中看到ThreadLocal,這意味着

  • 曾經是單線程程序,
  • 它保留了很多的國家在static變量,
  • 有人增加了多線程作爲事後思考,並且
  • 對於每個線程都重複某些靜態狀態是有意義的。

我幾乎從來不使用ThreadLocal在一個新的程序,因爲我努力不要編寫依賴於靜態變量的任何代碼,如果你正在使用ThreadLocal非靜態數據,你可能會做你的程序方式比它需要的更復雜。