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

标签 java multithreading threadpool threadpoolexecutor

所以,假设我有一个包含 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/

相关文章:

java - 如何协调多个类对私有(private)对象的同步

python - 如何在 Python 中使用 Ctrl+C 中止从队列中拉取项目的线程

java - Thread在线程池执行时抛出异常会怎样?

mysql - Mule CE MySQL线程已连接但未运行破管

c# - 使用线程池时如何判断线程何时完成?

java - 将字符串从 ElementValue 转换为数组

c++ - 原子 CAS 中的后缀评估

java - 如何使用Java测试文件是否为 "complete"(完全编写)

java - 创建仅适用于特定返回类型的自定义方法级别注释 [AOP]

java - 用于测试的 Spring bean Autowiring