在 java 方法中执行并行任务
executing parallel task in a java method
我对 java 中的并行编程还很陌生。我写了两个方法,每个方法都并行处理一组数据。方法 A 必须在方法 B 开始之前完成。我想知道执行并行任务的方法何时终止。是吗:
- 所有任务什么时候执行完?或
- 所有任务提交执行后。
注意: 我用 java visualVM 监视线程,我意识到线程大部分时间都在状态监视器和等待中。
你用 executorservice
标记了它,所以我假设你使用的是 Java ExecutorService
。答案完全取决于您的方法。
如果您的方法仅在各自的并行任务上调用 ExecutorService.submit()
或 ExecutorService.execute()
,则它们会在所有任务提交后立即退出;当方法退出时,并行任务可能仍在执行。
如果您希望等待与方法关联的所有任务完成,请先为每个任务调用 ExecutorService.submit()
,存储 returned Futures
。然后,在提交所有任务后,对每个 Futures
调用 Future.get()
。 Future.get()
在相关任务完成之前不会 return,因此一旦对 Future.get()
的所有调用都已 returned,所有任务都已完成,您可以退出该方法并继续进入下一个方法。
我对 java 中的并行编程还很陌生。我写了两个方法,每个方法都并行处理一组数据。方法 A 必须在方法 B 开始之前完成。我想知道执行并行任务的方法何时终止。是吗:
- 所有任务什么时候执行完?或
- 所有任务提交执行后。
注意: 我用 java visualVM 监视线程,我意识到线程大部分时间都在状态监视器和等待中。
你用 executorservice
标记了它,所以我假设你使用的是 Java ExecutorService
。答案完全取决于您的方法。
如果您的方法仅在各自的并行任务上调用 ExecutorService.submit()
或 ExecutorService.execute()
,则它们会在所有任务提交后立即退出;当方法退出时,并行任务可能仍在执行。
如果您希望等待与方法关联的所有任务完成,请先为每个任务调用 ExecutorService.submit()
,存储 returned Futures
。然后,在提交所有任务后,对每个 Futures
调用 Future.get()
。 Future.get()
在相关任务完成之前不会 return,因此一旦对 Future.get()
的所有调用都已 returned,所有任务都已完成,您可以退出该方法并继续进入下一个方法。