ScheduledExecutorService其实是一个线程池,用来定时多线程会互不影响,
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ScheduledExecutorService mScheduledExecutorService = new ScheduledThreadPoolExecutor(3);
ScheduledFuture<?> future = mScheduledExecutorService.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("schedule--A:" + sdf.format(new Date()));
}
}, 0,5,TimeUnit.SECONDS);
ScheduledFuture<?> future1 = mScheduledExecutorService.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("schedule--10 * 1000--B");
System.out.println(sdf.format(new Date()) + " B: sleep");
try {
Thread.sleep(20*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, 10,5,TimeUnit.SECONDS);
ScheduledFuture<?> future2 = mScheduledExecutorService.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(sdf.format(new Date()) + " C: throw Exception");
try {
Thread.sleep(3000);
// System.out.println(sdf.format(new Date()) + "unCancel");
} catch (InterruptedException e) {
e.printStackTrace();
}
throw new RuntimeException("test");
}
}, 30,5,TimeUnit.SECONDS);
日志如下:
schedule--A:2018-12-27 13:50:48
schedule--A:2018-12-27 13:50:53
schedule--A:2018-12-27 13:50:58
schedule--10 * 1000--B
2018-12-27 13:50:58 B: sleep
schedule--A:2018-12-27 13:51:03
schedule--A:2018-12-27 13:51:08
schedule--A:2018-12-27 13:51:13
schedule--A:2018-12-27 13:51:18
2018-12-27 13:51:18 C: throw Exception
schedule--10 * 1000--B
2018-12-27 13:51:18 B: sleep
schedule--A:2018-12-27 13:51:23
schedule--A:2018-12-27 13:51:28
schedule--A:2018-12-27 13:51:33
schedule--A:2018-12-27 13:51:38
schedule--10 * 1000--B
2018-12-27 13:51:38 B: sleep
schedule--A:2018-12-27 13:51:43
schedule--A:2018-12-27 13:51:48
可以看到C抛出异常后,A跟B都在执行各自的任务,并且A跟B执行的各自任务是相互独立;
☆☆☆☆☆接下来看怎么取消任务的执行了?
在执行定时任务会有一个对象返回ScheduledFuture<?> future2 = mScheduledExecutorService.scheduleAtFixedRate
该对象有一个方法可以取消任务执行future1.cancel(true);参数传true是说明如果该任务已经开始了,立即中断该任务,传false是如果该任务已经开始,则会等该次任务结束后取消下次定时任务的执行;
因篇幅问题不能全部显示,请点此查看更多更全内容