使用计时器有一些缺点
- 它只创建单个线程来执行任务,如果一个任务运行时间太长,其他任务就会受到影响。
- 它不处理任务引发的异常,线程只是终止,这会影响其他计划任务,并且它们永远不会运行
ScheduledThreadPoolExecutor可以正确处理所有这些问题,使用Timer是没有意义的。有两种方法可能适用于您的情况。scheduleAtFixedRate(...) 和 scheduleWithFixedDelay(..)
class MyTask implements Runnable {
@Override
public void run() {
System.out.println("Hello world");
}
}
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
long period = 100; // the period between successive executions
exec.scheduleAtFixedRate(new MyTask(), 0, period, TimeUnit.MICROSECONDS);
long delay = 100; //the delay between the termination of one execution and the commencement of the next
exec.scheduleWithFixedDelay(new MyTask(), 0, delay, TimeUnit.MICROSECONDS);