我遇到了一個令人難以置信的奇怪現象。我目前正在使用Java編寫即時通訊程序,並且我有一個變量來表示新用戶是否已連接(這是在單獨的類中)。這是有問題的地方對象ListenerThread extends Thread
代碼:System.out.println影響執行邏輯的線路
boolean listenerThreadConnected = ServerDriver.getListenerThread().connected;
System.out.println("Whatever in here");
if(listenerThreadConnected){
...
System.out.println("In the if statement");
...
}
因此,此代碼的工作。當listenerThreadConnected = true
執行if
語句時,它輸出In the if statement
並執行if語句中的所有其他內容。然而,除了註釋掉System.out.println("Whatever in here")
和if
聲明沒有觸發,並且沒有輸出In the if statement
的符號之外,我沒有更改其他代碼。我的代碼看起來像這樣:
boolean listenerThreadConnected = ServerDriver.getListenerThread().connected;
//System.out.println("Whatever in here");
if(listenerThreadConnected){
...
System.out.println("In the if statement");
...
}
我很困惑。這個System.out.println
怎麼會影響實際的邏輯?我知道這個問題非常開放,但你有沒有過類似的經歷?對於某些上下文,這全部在while
循環中,並且ListenerThread是併發運行的線程。我似乎無法複製這個結果,除了在我目前的代碼。
[編輯]更換System.out.println
有Thread.sleep(1)
也似乎工作,所以這使我覺得這是一種併發問題。
非常感謝。對於多線程和併發來說很新穎。 – dsiegler19