这是我正在尝试的代码:
@Model.Name
输出:
import java.util.Timer;
import java.util.TimerTask;
public class PeriodicTask {
public static void main (String[] args) {
System.out.println("Main thread: " + Thread.currentThread());
Timer timer = new Timer();
final long start = System.currentTimeMillis();
timer.schedule(new TimerTask() {
@Override
public void run () {
System.out.print("Timer task invoked in millis: " +
(System.currentTimeMillis()- start));
System.out.println(" -- " + Thread.currentThread());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("task finished "+(System.currentTimeMillis()
- start));
}
}, 1000,500);
}
}
根据java.util.Timer文档,提供的时间段应该分隔每个任务执行。所以我期待每个钓鱼任务和新调用的任务应分开500毫秒,例如在第一个任务结束和第二个任务执行开始之间应该是:
Main thread: Thread[main,5,main]
Timer task invoked in millis: 1000 -- Thread[Timer-0,5,main]
task finished 2001
Timer task invoked in millis: 2001 -- Thread[Timer-0,5,main]
task finished 3002
Timer task invoked in millis: 3002 -- Thread[Timer-0,5,main]
task finished 4002
Timer task invoked in millis: 4002 -- Thread[Timer-0,5,main]
......
我错过了什么吗?
我正在使用JDK 1.8
答案 0 :(得分:0)
分隔每个任务的period
不是相对于任务的结束而是相对于它的开始。在Timer
过去之后,period
会尝试再次安排任务。除非任务仍在运行,否则将在上一个任务完成后立即安排。
在示例中,您为Timer
设置了period
500ms
。您在sleep()
run()
方法中调用了1000ms
。这意味着Timer
想要在半秒后再次安排任务,但是因为前一个任务还有另外半秒才完成。