gpt4 book ai didi

java - 如何让主线程等待其他线程在 ThreadPoolExecutor 中完成

转载 作者:行者123 更新时间:2023-12-04 17:58:02 25 4
gpt4 key购买 nike

我正在使用 ThreadPoolExecutor 在我的 Java 应用程序中实现线程。

我有一个 XML,我需要解析它并将它的每个节点添加到一个线程以执行完成。我的实现是这样的:

parse_tp 是创建的线程池对象,ParseQuotesXML 是带有 run 方法的类。

        try {     
List children = root.getChildren();
Iterator iter = children.iterator();

//Parsing the XML
while(iter.hasNext()) {
Element child = (Element) iter.next();
ParseQuotesXML quote = new ParseQuotesXML(child, this);
parse_tp.execute(quote);
}
System.out.println("Print it after all the threads have completed");
catch(Exception ex) {
ex.printStackTrace();
}
finally {
System.out.println("Print it in the end.");
if(!parse_tp.isShutdown()) {
if(parse_tp.getActiveCount() == 0 && parse_tp.getQueue().size() == 0 ) {
parse_tp.shutdown();
} else {
try {
parse_tp.awaitTermination(30, TimeUnit.SECONDS);
} catch (InterruptedException ex) {
log.info("Exception while terminating the threadpool "+ex.getMessage());
ex.printStackTrace();
}
}
}
parse_tp.shutdown();
}

问题是,这两个打印输出语句是在其他线程退出之前打印出来的。我想让主线程等待所有其他线程完成。在正常的 Thread 实现中,我可以使用 join() 函数来完成它,但无法在 ThreadPool Executor 中实现相同的功能。另外想问下finally block中写的代码是否正确关闭了线程池?

谢谢,阿米特

最佳答案

A CountDownLatch专为这个目的而设计。可以找到示例 herehere .当事先不知道线程数时,考虑一个 Phaser , Java 1.7 中的新功能,或 UpDownLatch .

关于java - 如何让主线程等待其他线程在 ThreadPoolExecutor 中完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1906670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com