Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何暂停主线程以同时执行2个方法,然后返回主线程?_Java_Multithreading_Concurrency - Fatal编程技术网

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

Java 如何暂停主线程以同时执行2个方法,然后返回主线程?,java,multithreading,concurrency,Java,Multithreading,Concurrency,我有一个包含5个方法的类。在程序中的某个时刻,我想同时运行其中两个方法。下图说明了我所说的内容。 method2()完成后,我希望method3()和method4()同时运行。Method3()和method4()本质上做的是完全相同的事情,但它们有独立的资源,因此不必同步。 当method3()和method4()完成时,我希望Aux线程被销毁,程序返回主线程。最好的方法是什么 ExecutorService executorService = Executors.newFixedThre

我有一个包含5个方法的类。在程序中的某个时刻,我想同时运行其中两个方法。下图说明了我所说的内容。 method2()完成后,我希望method3()和method4()同时运行。Method3()和method4()本质上做的是完全相同的事情,但它们有独立的资源,因此不必同步。 当method3()和method4()完成时,我希望Aux线程被销毁,程序返回主线程。最好的方法是什么

 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();