java ScheduledThreadPoolExecutor在线程执行器中执行延时任务

是什么?为什么?怎么做?

 

一、是什么

ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类,功能类似Timer,内置线程池,支持错误处理和并发。

二、为什么

提到延时任务就不得不提到Timer,但是Timer有其缺点:

java Timer的缺点

为了克服这些缺点,我们使用ScheduledThreadPoolExecutor执行延时任务。

三、怎么做

1.不带返回值的延时任务

(1)简单例子

运行结果:

因为内置线程池,所以一个ScheduledThreadPoolExecutor对象就可以实现多个延时任务的并发。这取决于你分配多少线程给线程池,这里只分配了两条:

因为有两个延时任务,所以刚好能并发执行。如果有三个任务,就只能先并发两个任务,剩下一个必须等待。

(2)如果某个延时任务报错

运行结果:

报出错误的线程将被立刻终止,没有错误信息返回。

(3)复杂一点的例子

添加了线程的超时处理。

2.带返回值的延时任务

(1)简单例子

运行结果:

(2)如果某个延时任务报错

运行结果:

报出错误的线程将被立刻终止,有错误信息返回(这里和不带返回值的延时任务不同)。

(3)复杂一点的例子

暂时想不到复杂的例子…以后遇到再补上吧。

四、总结

要体会到ScheduledThreadPoolExecutor的优点。

发表评论

电子邮件地址不会被公开。 必填项已用*标注