Java 如何暂停主线程以同时执行2个方法,然后返回主线程?
我有一个包含5个方法的类。在程序中的某个时刻,我想同时运行其中两个方法。下图说明了我所说的内容。 method2()完成后,我希望method3()和method4()同时运行。Method3()和method4()本质上做的是完全相同的事情,但它们有独立的资源,因此不必同步。 当method3()和method4()完成时,我希望Aux线程被销毁,程序返回主线程。最好的方法是什么Java 如何暂停主线程以同时执行2个方法,然后返回主线程?,java,multithreading,concurrency,Java,Multithreading,Concurrency,我有一个包含5个方法的类。在程序中的某个时刻,我想同时运行其中两个方法。下图说明了我所说的内容。 method2()完成后,我希望method3()和method4()同时运行。Method3()和method4()本质上做的是完全相同的事情,但它们有独立的资源,因此不必同步。 当method3()和method4()完成时,我希望Aux线程被销毁,程序返回主线程。最好的方法是什么 ExecutorService executorService = Executors.newFixedThre
ExecutorService executorService = Executors.newFixedThreadPool(2);
// method reference introduced in Java 8
executorService.submit(this::method3());
executorService.submit(this::method4());
// close executorService
executorService.shutdown();
ExecutorService executorService = Executors.newFixedThreadPool(2);
// method reference introduced in Java 8
executorService.submit(this::method3());
executorService.submit(this::method4());
// close executorService
executorService.shutdown();
我尝试调用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
,您可以在其上调用get()
来阻止线程。因此:
ExecutorService executorService = Executors.newFixedThreadPool(2);
// method reference introduced in Java 8
executorService.submit(this::method3());
executorService.submit(this::method4());
// close executorService
executorService.shutdown();
ExecutorService executorService = Executors.newFixedThreadPool(2);
Future<?> f1 = executorService.submit(this::method3());
Future<?> f2 = executorService.submit(this::method4());
f1.get();
f2.get();
executorService.shutdown();
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()。另外,如果需要多次创建executor服务,最好在不调用它的shutdown()
的情况下保留executor服务。线程将简单地停止。executorService.submit
返回Future
,您可以在其上调用get()
来阻止线程。因此:
ExecutorService executorService = Executors.newFixedThreadPool(2);
// method reference introduced in Java 8
executorService.submit(this::method3());
executorService.submit(this::method4());
// close executorService
executorService.shutdown();
ExecutorService executorService = Executors.newFixedThreadPool(2);
Future<?> f1 = executorService.submit(this::method3());
Future<?> f2 = executorService.submit(this::method4());
f1.get();
f2.get();
executorService.shutdown();
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()。另外,如果需要多次创建executor服务,最好在不调用它的shutdown()
的情况下保留executor服务。线程将简单地停驻。当然,如果程序只向线程池提交一个任务,而让主线程执行另一个任务,它也会工作得很好,并且会使用更少的资源。当然,如果程序只向线程池提交一个任务,它也会工作得很好,并且会使用更少的资源,并让主线程执行其他任务。
ExecutorService executorService = Executors.newFixedThreadPool(2);
// method reference introduced in Java 8
executorService.submit(this::method3());
executorService.submit(this::method4());
// close executorService
executorService.shutdown();