我有一个包含 5 个方法的类。在程序的某个时刻,我想同时运行其中 2 个方法。下图说明了我正在谈论的内容。 method2() 完成后,我希望 method3() 和 method4() 同时运行。 Method3() 和 method4() 本质上做的是完全相同的事情,但具有隔离的资源,因此不必同步。 当 method3() 和 method4() 完成时,我希望辅助线程被销毁并且程序返回到主线程。最好的方法是什么?
我尝试调用 ExecutorService,但这似乎创建了与主线程同时运行的线程 - 而不是暂停主线程。
ExecutorService executorService = Executors.newFixedThreadPool(2);
// method reference introduced in Java 8
executorService.submit(this::method3());
executorService.submit(this::method4());
// close executorService
executorService.shutdown();
最佳答案
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()
将阻塞主线程,直到两个 future 都完成。另外,如果需要多次创建执行器服务,最好保留执行器服务而不调用 shutdown()
在上面。线程将简单地停止。
关于java - 如何暂停主线程并发执行2个方法,然后返回主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54204075/