【发布时间】:2014-07-02 08:45:35
【问题描述】:
我有一个 ThreadPoolExecutor,其中一个线程将用于批处理,因此在将新任务分配给执行程序之前,我必须等待较早的任务完成,我是根据活动作业的值来执行此操作的,但仔细看我发现,执行者不会立即执行任务。
这对我造成的问题是我准备好下一批但第一个任务尚未开始,因此活动作业的值为 0。
我怎样才能立即运行任务。我也可以接受任何其他执行者或可以做到这一点的方式。
【问题讨论】:
-
当你 submit() 任务到线程池执行器时,你会得到一个 Future。存储该返回值,您可以等待该 Future 以确保您之前的任务已完成。但是,在提交新的批处理作业之前,您必须等待之前的任务完成有什么特别的原因吗?
-
好吧,如果你有一个带有 1 个线程的池,并且你需要在提交下一个任务之前等待,那么你不需要任何线程池...
-
我不太明白你想要达到什么目的:如果你想等待前面的任务完成,你为什么要使用执行器?
-
场景是我有很多数据会被处理然后写入文件,所以这一切都将分批完成。因此,一旦我处理了固定数量的数据,它就会被提供给作为执行程序的编写器线程并继续处理更多数据,但是在我将下一批数据提供给编写器之前,我应该等待较早的工作,因为他们可能会写到同一个文件。
-
@user996808 如果您有一个只有 1 个线程的 ThreadPoolExecutor,您的作业将按照您提交作业的顺序执行,一次一个作业。如果当前作业没有完成,执行程序自然会将作业排队 - 因此在这种情况下,您无需在提交新作业之前等待较早的作业。
标签: java executorservice threadpoolexecutor