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