我正在使用java.util.Timer来安排定期任务.有一次,我想关闭它,等待它完成.
Timer.cancel()将阻止任何未来的任务运行.我如何确保当前没有任何任务正在运行(如果是的话,还是等待它们?)
我可以引入外部同步机制,但我不知道它们如何涵盖所有情况.例如,如果我在任务中的某个Monitor上进行同步,我仍然会错过任务刚刚开始执行但没有使用监视器的情况.
等待所有任务真正完成的建议做法是什么,包括当前正在运行的任务?
我有一个烦人的问题.现在,我有一段代码片段启动一个线程,在该线程中设置一个计时器,然后退出该线程并继续其生命.我的目的是让程序在继续代码流之前等待TimerTask完成.但是,显然,设置新的TimerTask不会暂停执行以等待定时器运行.
如何设置它以便我的代码到达TimerTask,等待TimerTask过期,然后继续?我是否应该使用计时器?我到处寻找解决方案,但我似乎找不到一个.
timer = new Timer();
Thread t = new Thread(new Runnable(){
boolean isRunning = true;
public void run() {
int delay = 1000;
int period = 1000;
interval = 10;
timerPanel.setText(interval.toString());
//Scheduling the below TimerTask doesn't wait
//for the TimerTask to finish before continuing
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
timerPanel.setText(setInterval().toString());
}
}, delay, period);
System.out.println("Thread done.");
}
});
t.start();
try {
t.join(); //doesn't work as I wanted
} catch (InterruptedException e) {
e.printStackTrace();
}
endTask();
Run Code Online (Sandbox Code Playgroud)
提前致谢.
编辑:对于重复任务的混乱感到抱歉.我需要重复该任务,因为它是一个倒数计时器,每秒从10脉冲到0脉冲.函数setInterval()最终取消计时器.这是相关的代码: …