【发布时间】:2011-10-14 09:02:35
【问题描述】:
如果之前的任务尚未完成,我有兴趣使用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 的目的。
也许我应该看看另一种执行者?或者只是使用我在这里发布的代码?有什么想法吗?
【问题讨论】:
标签: java multithreading executorservice executor