今日、私は を使用して 1 つのタイムアウト ジョブを作成していましたが、変数 TimerTask
があるという新しい問題に陥りました。私の理解では、この変数の値が変更されるとすぐに、実行中のすべてによって通知されます。しかし、このプログラムを実行すると、許容できない出力を下回りました。static volatile boolean
flag
thread
O/P:
--------------
--------------
DD
BB
Exiting process..
CC
私の最後の印刷は終了プロセスであるはずです..なぜこの奇妙な動作なのですか?
私のコードは次のとおりです。
public class TimeOutSort {
static volatile boolean flag = false;
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
flag = true;
System.out.println("Exiting process..");
// System.exit(0);
}
}, 10 * 200);
new Thread(new Runnable() {
@Override
public void run() {
while (!flag)
System.out.println("BB");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (!flag)
System.out.println("CC");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (!flag)
System.out.println("DD");
}
}).start();
}
}
編集:どうすればこれを達成できますか?