所以,假设我有一个包含 10 个线程的 ScheduledExecutorService
,如此生成,并且我启动一个定期任务每分钟运行一次。
svc = Executors.newScheduledThreadPool(10);
svc.scheduleAtFixedRate(myRunnable, 0, 1, TimeUnit.MINUTES);
这是让 myRunnable
每分钟运行一次的完美方法。现在,假设 myRunnable
的执行时间长于一分钟(因此任务持续时间现在超过了任务周期)。我注意到的当前行为是线程池将等到 myRunnable 完成执行后再运行。看起来我的代码所说的是安排任务,但仅使用 myRunnable
占用池中的一个线程。
是否有一个选项/另一个 API/附加方法调用,我可以使该线程池在第一个线程在一分钟内未完成执行的情况下仅获取下一个可用线程并运行? (或者我做错了?)
最佳答案
为什么不将您的 Runnable 安排为一次性执行(延迟后),然后在 Runnable 开始时再次安排它?
关于如果任务持续时间超过周期,Java ScheduledThreadPool 将使用额外的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659854/