Java定时方式:
一、让线程sleep(不再赘述)
二、用Timer和TimerTask,比上一种方式的好处有:
- 当启动和去取消任务时可以控制
- 第一次执行任务时可以指定你想要的delay时间
Timer timer = new Timer(); // Timer是单线程的
long delay = 0;
long intervalPeriod = 2000;
TimerTask task = new TimerTask(){
@Override
public void run() {
System.out.println("TimerTask执行...");
timer.cancel(); // 取消定时器
}
};
timer.scheduleAtFixedRate(task,0,intervalPeriod); // 0表示一开始就执行,也可以使用Date指定开始时间
三、 用ScheduledExecutorService是从的java.util.concurrent里,做为并发工具类被引进的,相比于上两个方法,它有以下好处:
- 相比于Timer的单线程,它是通过线程池的方式来执行任务的
- 提供了良好的约定,以便设定执行的时间间隔
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
Runnable run = () -> {
System.out.println("ScheduledExecutorService线程池执行定时任务...");
service.shutdown(); // 销毁线程池
};
service.scheduleAtFixedRate(run,0,2, TimeUnit.SECONDS); // 一开始就执行,两秒为一周期