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