ThreadLocal確保字段對於線程是全局的和本地的。 (全局的,因爲它可用於線程和本地的所有方法,因爲它僅限於該線程的堆棧)Java的Threadlocal可以應用於非靜態字段嗎?如果是,如何?
這對我來說沒什麼意義,因爲每個線程的堆棧都僅限於該線程。所以它已經是'threadlocal'了,對吧?
爲什麼我們需要ThreadLocal? - 在進一步閱讀時,我確認了來自各個網站的假設(其中大多數網站未能提供這些事實或相互矛盾),這確實適用於靜態字段。 這確實有道理。
所以我的問題是,有沒有一個多線程場景的ThreadLocal可以/需要應用於非靜態字段? (我碰到一些網站,說出來「的ThreadLocal」是用於靜態字段「主要」;甚至https://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html使用單詞「通常」)
是,ThreadLocals的情況下正常工作。然而,本地線程的「優勢」在於,您可以輕鬆訪問它。當你不把它放到一個靜態字段中時,你將失去這個優勢,因爲你必須交出實際的持有者實例。它有助於將ThreadLocal視爲一個HashMap,其中Thread.currentThread()是關鍵。 – eckes
我認爲這個「全球」一詞顯然是錯誤的。不要打擾它。有足夠的樣本明確表示您不想讓線程(寫入)訪問它,例如安全或事務上下文。這通常是使用包或專用可見字段來完成的。 – eckes