如果任务持续时间超过句点,Java ScheduledThreadPool将使用额外的线程

时间:2014-10-30 17:43:06

标签: java multithreading threadpool threadpoolexecutor

所以,假设我有一个ScheduledExecutorService有10个线程,就这样生成了,我开始定期执行一次每分钟运行一次。

svc = Executors.newScheduledThreadPool(10);
svc.scheduleAtFixedRate(myRunnable, 0, 1, TimeUnit.MINUTES);

这是让myRunnable每分钟运行一次的完美方式。现在让我们说myRunnable的执行需要更长而不是一分钟(因此任务持续时间现在超过任务期限)。我注意到的当前行为是线程池将等待myRunnable完成执行,然后再次运行。看起来我用我的代码说的是安排任务但只占用池中一个线程myRunnable

是否有一个选项/另一个API /附加方法调用,我可以让这个线程池只抓取下一个可用线程并运行,如果第一个线程在一分钟内没有完成执行? (或者我这样做错了?)

1 个答案:

答案 0 :(得分:1)

为什么不安排Runnable进行一次性执行(延迟后),然后再在Runnable计划开始时再安排一次?