实现定时任务线程有如下三种方式:
①普通线程死循环
/**
* 普通thread
* 这是最常见的,创建一个thread,然后让它在while循环里一直运行着,
* 通过sleep方法来达到定时任务的效果,这样可以快速简单的实现
*/
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
System.out.println("普通线程执行中......");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start();
②使用定时器timer
/**
* 与第一种方式相比:
* 优势 1:当启动和取消任务时可以控制
* 优势 2:第一次执行任务时可以指定你想要的delay时间
* 在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。
* Timer实例可以调度多任务,它是线程安全的。
*
*/
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("timer线程执行中......");
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, 5000, 1000);
③使用定时调度线程池ScheduledExecutorService
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("定时任务线程执行中......");
}
};
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleWithFixedDelay(runnable, 5000, 500, TimeUnit.MILLISECONDS);