今天我正在使用创建一个超时作业,TimerTask
但遇到了一个新问题,我有一个static volatile boolean
变量 flag
。我的理解是,一旦此变量的值发生更改,所有正在运行的thread
. 但是当我运行这个程序时,我得到了低于输出的结果,这是不可接受的。
输出/输出:
--------------
--------------
DD
BB
Exiting process..
CC
我的期望是我的最后一次打印应该是Exiting process..为什么会出现这种奇怪的行为?
我的代码是:
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();
}
}
编辑:我怎样才能做到这一点?