私は信じられないほど奇妙な現象に遭遇しました。私は現在、Javaでインスタント・メッセンジャー・プログラムをプログラミングしており、新しいユーザーが接続しているかどうかを表す変数を持っています(別のクラスにあります)。System.out.println行がロジックの実行に影響する
boolean listenerThreadConnected = ServerDriver.getListenerThread().connected;
System.out.println("Whatever in here");
if(listenerThreadConnected){
...
System.out.println("In the if statement");
...
}
ので、このコードは動作します:ここではオブジェクトListenerThread extends Thread
は、問題のコードです。 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は同時に実行されるスレッドです。私は現在のコードを除いてこの結果を複製することはできません。 Thread.sleep(1)
でSystem.out.println
の交換
[EDIT]も動作しているようですので、これはそれが同時実行の問題であることを考えるように私をリード。
ありがとうございます。マルチスレッド化と同時実行性にはまったく新しいものです。 – dsiegler19