-1
我有一個Spring應用程序,它將我的業務邏輯方法創建爲一個bean。ThreadLocal變量始終爲空
我的代碼如下所示:
public class MyClass {
private ThreadLocal<String> object1 = new ThreadLocal<String>();
public String myMethodFoo(MyTestObject testobject) {
object1.set("Blah");
...
...
...
return object1.get();
}
}
現在,當我運行我的單元測試,調用這個方法,我總是在這裏我設置的變量值即object1.set("Blah")
行空指針異常。
但是當我將ThreadLocal對象聲明爲final時,它會奇蹟般地消失。 ThreadLocal對象是否總是被聲明爲最終的?
請提供[mcve]。 –
您的測試實際上是否運行多個線程?如果是這樣,你在一個線程中分配給object1並從多箇中讀取它;這是一場數據競賽。你需要確保讀取與寫入之前有正式的發生關係,並且我很容易做到這一點,即通過使變量最終成爲可能。 – yshavit
不,我現在只用單線程來測試它,以瞭解它是如何工作的。當它僅向單個線程應用程序本身顯示空值時,我感到困惑。 – chrisrhyno2003