ScheduledThreadPoolExecutor 线程池例子
一. ScheduledThreadPoolExecutor 使用
ScheduledThreadPoolExecutor 继承自 ThreadPoolExecutor,主要用来给定时间运行任务,或者定期执行任务。
在 ScheduledThreadPoolExecutor 的实现中,使用了 FutureTask 运行任务以及使用无界队列 DelayedWorkQueue 来保存任务。
1. 使用示例
提交任务
ScheduledThreadPoolExecutor 实现了 ScheduledExecutorService 接口,其中,接口中有四个需要实现的方法,其中 schedule()
的两个方法需要设置任务以及任务启动的延迟时间,scheduleAtFixedRate()
可以设置任务定时重复执行,scheduleWithFixedDelay()
则是设置两个任务之间的执行延迟时间。
ScheduledThreadPoolExecutor poolExecutor = new ScheduledThreadPoolExecutor(2);
poolExecutor.schedule(() -> {
// 提交的任务
}, 5, TimeUnit.HOURS);
poolExecutor.scheduleAtFixedRate(() -> {
// 提交的任务
}, 0, 5, TimeUnit.HOURS);
poolExecutor.scheduleWithFixedDelay(() -> {
// 提交的任务
}, 0, 5, TimeUnit.HOURS);
简单例子
下面的例子中每 500 毫秒打印一次字符串,executor 会有 5 秒的时间来等待任务执行结束,也就是一共可以打印 10 次字符串。
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
executor.scheduleWithFixedDelay(