所以,假设我有一个ScheduledExecutorService
有10个线程,就这样生成了,我开始定期执行一次每分钟运行一次。
svc = Executors.newScheduledThreadPool(10);
svc.scheduleAtFixedRate(myRunnable, 0, 1, TimeUnit.MINUTES);
这是让myRunnable
每分钟运行一次的完美方式。现在让我们说myRunnable
的执行需要更长而不是一分钟(因此任务持续时间现在超过任务期限)。我注意到的当前行为是线程池将等待myRunnable
完成执行,然后再次运行。看起来我用我的代码说的是安排任务但只占用池中一个线程myRunnable
。
是否有一个选项/另一个API /附加方法调用,我可以让这个线程池只抓取下一个可用线程并运行,如果第一个线程在一分钟内没有完成执行? (或者我这样做错了?)
答案 0 :(得分:1)
为什么不安排Runnable进行一次性执行(延迟后),然后再在Runnable计划开始时再安排一次?