Java 5 推出了基于线程池设计的 ScheduledExecutor。其设计思想是,每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。需要注意的是,只有当任务的执行时间到来时,ScheduedExecutor 才会真正启动一个线程,其余时间 ScheduledExecutor 都是在轮询任务的状态。
定时任务
定时任务即在指定的时间间隔重复执行任务
//定时任务
ScheduledExecutorService service = Executors.newScheduledThreadPool(3);//创建一个线程池根据需求创建不同大小的
long initialDelay = 1;
long period = 60;
// 从现在开始1秒钟之后,每隔1秒钟执行一次 scheduleAtFixedRate(run,delay,period,TimeUnit.SECONDS)
// run为具体要执行的方法,delay为延迟多少时间来执行run方法,period为间隔多长时间来重复执行run方法,TimeUnit.SECONDS为delay和period的单位是秒
service.scheduleAtFixedRate(new Runnable(){
@Override
public void run() {
// TODO Something //你需要定时执行的任务
}}, initialDelay, period, TimeUnit.SECONDS);
指定时间任务
指定时间任务指在某个时间执行的任务
Calendar calendar = Calendar.getInstance(); //获取时间点
calendar.set(Calendar.HOUR_OF_DAY, 0); // 控制时
calendar.set(Calendar.MINUTE, 0); // 控制分
calendar.set(Calendar.SECOND, 0); // 控制秒
//这里我没有控制是哪一天,默认为当天
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的 00:00:00
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
// TODO Something //你需要定时执行的任务
}
}, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行
}
以上是定时任务,和指定时间任务具体方法。