Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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 ExecutorService和CountDownLatch是否会阻止主线程直到完成?_Java_Multithreading_Executorservice_Countdownlatch - Fatal编程技术网

Java ExecutorService和CountDownLatch是否会阻止主线程直到完成?

Java ExecutorService和CountDownLatch是否会阻止主线程直到完成?,java,multithreading,executorservice,countdownlatch,Java,Multithreading,Executorservice,Countdownlatch,我的问题是,我有两个线程t1和t2。他们都做了一些计算,根据我的程序,我想使用一种并发技术,阻止t1和t2完成任务,然后继续 我尝试了countdownlock,读到了ExecutorService,并举了一个小例子。关于执行器服务,我做了如下工作: executor.execute(new RunnableClass(bgr,3)) executor.execute(new RunnableClass(bgr,7)) executor.shutdown(); if (executor.isT

我的问题是,我有两个线程t1和t2。他们都做了一些计算,根据我的程序,我想使用一种并发技术,阻止t1和t2完成任务,然后继续

我尝试了
countdownlock
,读到了
ExecutorService
,并举了一个小例子。关于执行器服务,我做了如下工作:

executor.execute(new RunnableClass(bgr,3))
executor.execute(new RunnableClass(bgr,7))
executor.shutdown();

if (executor.isTerminated()) {
    print("terminated") 
}
而且“terminated”一词从未打印,这意味着
executorService
对象不阻塞


请让我知道我应该使用哪种并发技术来适应我的情况

在开始编码之前,阅读文档总是会澄清一些事情。。 但我只想分享几点: 1.)倒计时闩锁可以解决您的问题。在编写代码之前,请阅读此链接。。 基本上,这个概念是将程序锁存在一个固定的状态,并在锁存被释放之前停止它的运行。 因此,您有2个线程…将countdownlatch值设置为2。使两个线程在完成后减小该值。在闩锁值减为0之前,主线程将等待该操作发生


executor.shutdown…参考文档…它说它在关闭之前等待所有提交的任务完成。

认真地看API文档。答案就在这里:
isTerminated()
不检查执行器是否已关闭,它检查执行器是否已终止。正如JB Nizet所说,阅读文档,它非常清楚。如果您对文档有任何疑问,请告诉我们。@m0skit0我知道isterminated()不会检查执行器是否已关闭。.我想阻止,直到t1和t2完成执行,以便继续。.请建议使用
等待终止
,正如API文档中所述。正如第一条评论中所建议的:阅读文档。