如何暂停主线程以同时执行2个方法,然后返回主线程?

时间:2019-01-15 17:33:17

标签: java multithreading concurrency

我有一个包含5个方法的类。在程序中的某个点,我想同时运行两种方法。下图说明了我在说什么。 method2()完成后,我希望method3()和method4()同时运行。 Method3()和method4()本质上是在做完全相同的事情,但是它们具有隔离的资源,因此不必同步。 在method3()和method4()完成后,我希望销毁辅助线程,并使程序返回到主线程。最好的方法是什么?

Image of program threads

我尝试调用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();

1 个答案:

答案 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()。线程只会停放。