在java方法中执行并行任务

时间:2017-08-04 13:25:27

标签: java multithreading executorservice

我对java中的并行编程很陌生。我写了两个方法,每个方法并行处理一组数据。方法A必须在方法B开始之前完成。我想知道执行并行任务的方法何时终止。是吗:

  • 当所有任务完成执行时?或
  • 提交所有任务后执行。

NB:我用java visualVM监视了线程,我意识到线程大部分时间都花在状态监视器上并等待。

1 个答案:

答案 0 :(得分:1)

您已使用executorservice对此进行了标记,因此我假设您使用的是Java ExecutorService。答案取决于你的方法究竟做了什么。

如果您的方法仅在每个并行任务上调用ExecutorService.submit()ExecutorService.execute(),则会在提交所有任务后立即退出;当方法退出时,并行任务可能仍在执行。

如果您希望等待与方法关联的所有任务完成,请先为每个任务调用ExecutorService.submit(),然后存储返回的Futures。然后,一旦提交了所有任务,请在每个Future.get()上致电FuturesFuture.get()在相关任务完成之前不会返回,因此一旦所有对Future.get()的调用都已返回,所有任务都已完成,您可以退出该方法并继续执行下一个方法。