我有一个包含5个方法的类。在程序中的某个点,我想同时运行两种方法。下图说明了我在说什么。 method2()完成后,我希望method3()和method4()同时运行。 Method3()和method4()本质上是在做完全相同的事情,但是它们具有隔离的资源,因此不必同步。 在method3()和method4()完成后,我希望销毁辅助线程,并使程序返回到主线程。最好的方法是什么?
我尝试调用ExecutorService,但这似乎创建了与Main线程并发运行的线程-不暂停Main线程。
ExecutorService executorService = Executors.newFixedThreadPool(2);
// method reference introduced in Java 8
executorService.submit(this::method3());
executorService.submit(this::method4());
// close executorService
executorService.shutdown();
答案 0 :(得分:4)
executorService.submit
返回Future<T>
,您可以在其上调用get()
来阻塞线程。所以:
ExecutorService executorService = Executors.newFixedThreadPool(2);
Future<?> f1 = executorService.submit(this::method3());
Future<?> f2 = executorService.submit(this::method4());
f1.get();
f2.get();
executorService.shutdown();
f1.get()
和f2.get()
将阻塞主线程,直到两个期货都完成。另外,如果您需要多次创建执行程序服务,最好保持执行程序服务而不在其上调用shutdown()
。线程只会停放。