ScheduledExecutorService
如果之前的任务尚未完成,我有兴趣使用为任务生成多个线程。例如,我需要每 0.5 秒处理一次文件。第一个任务开始处理文件,如果第一个线程未完成,则在 0.5 秒后生成第二个线程并开始处理第二个文件,依此类推。这可以通过以下方式完成:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(4)
while (!executor.isShutdown()) {
executor.execute(task);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// handle
}
}
现在我的问题是:为什么我不能这样做executor.scheduleAtFixedRate
?
我得到的是,如果第一个任务需要更长的时间,第二个任务会在第一次完成后立即启动,但即使 executor 有线程池,也不会启动新线程。executor.scheduleWithFixedDelay
很清楚 - 它执行任务之间的时间跨度相同,完成任务需要多长时间并不重要。所以可能我误解了ScheduledExecutorService
目的。
也许我应该看看另一种执行者?或者只是使用我在这里发布的代码?有什么想法吗?