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

2024-01-26

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

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

parse_ip 是创建的线程池对象,ParseQuotes XML 是具有 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();  
        }

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

谢谢, 阿米特


A CountDownLatch http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html正是为此目的而设计的。可以找到例子here https://stackoverflow.com/a/11372932/230513 and here http://groups.google.com/group/comp.lang.java.programmer/msg/1d9c821dcda040f6。当事先不知道线程数时,可以考虑Phaser https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Phaser.html,Java 1.7 中的新功能,或者UpDownLatch http://groups.google.com/group/comp.lang.java.programmer/browse_frm/thread/2342bd25ac3dd6b9.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让主线程等待ThreadPoolExecutor中其他线程完成 的相关文章

  • java.lang.unsatisfiedlinkerror 无法加载 amd 64 位 .dll ia 32 位

    当我尝试在 Eclipse 上运行我的项目时 出现以下错误 它在我开发它的计算机上运行良好 但当我将其导入我的笔记本电脑时 它不起作用 这个问题已经在本网站的其他地方提出过 这个问题的主要原因似乎是环境变量设置不正确 但我检查过 它们似乎是
  • android-透明RelativeLayout

    我想要制作一个具有可绘制渐变作为背景的活动 并将在其背景顶部显示 4 个面板 相对布局 现在我想让 4 个面板透明 例如 50 以便也可以看到渐变背景 我搜索了谷歌 但我发现只能通过活动而不是布局来做到这一点 如何做我想做的事 您可以创建一
  • Java:BufferedReader readLine() 中的 IOEXception 有何用途?

    我可以使用 try catch 循环 修复 以下异常 但我无法理解原因 为什么 in readLine 部分会不断引发IOExceptions 抛出此类异常的真正目的是什么 目标可能不仅仅是更多副作用 代码和 IOException jav
  • 如何在 Spring Boot 1.4 中自定义 Jackson

    我一直无法找到如何使用的示例Jackson2ObjectMapperBuilderCustomizer java在spring boot 1 4中自定义Jackson的功能 boot 1 4 中自定义 Jackson 的 doco http
  • 使 TreeMap 比较器容忍 null

    这个定制的 Valuecomarator 按其值对 TreeMap 进行排序 但在搜索 TreeMap 是否具有某个键时 它不能容忍 nullpointException 如何修改比较器来处理零点 import java io IOExce
  • 使用Optional作为类中的属性是一个好习惯吗? [复制]

    这个问题在这里已经有答案了 我读过一些关于目的的内容Optional 不幸的是我不记得在哪里 在Java 8中 我很惊讶作者没有提到使用Optional作为类中的属性 由于我在课堂上经常使用选项 我想知道这是否是一个好的做法 或者我可以更好
  • com.google.gwt.dev.jjs.InternalCompilerException:访问期间出现意外错误

    我在使用版本 2 6 0 编译 gwt 应用程序时遇到以下错误 最初我用 gwt 版本 2 6 1 的 maven 编译它 然后尝试通过版本 2 6 0 的 eclipse 编译它 跟版本兼容有关系吗 com google gwt dev
  • 全屏独占模式下的 AWT 框架在窗口弹出对话框中最小化

    我正在开发一个在全屏独占模式下使用 awt 框架的应用程序 一切正常 直到弹出窗口可见 这会抢走焦点 我的应用程序将被最小化 这是我的框架的初始化代码 if ApplicationConfig getInstance useFullscre
  • 用 Java 捕获扬声器输出

    使用Java可以捕获扬声器输出吗 此输出不是由我的程序生成的 而是由其他正在运行的应用程序生成的 这可以用 Java 完成还是我需要求助于 C C 我有一个基于 Java 的应用程序 使用过的爪哇声音 https stackoverflow
  • boost::asio::io_service 是否保留处理程序的顺序?

    Does boost asio io service http www boost org doc libs release doc html boost asio reference io service html保证处理程序的调用顺序与
  • Handler、MessageQueue、Looper,它们都是运行在UI线程上的吗?

    我正在尝试解决线程问题 并且我知道我可能会使用Handler将消息 可运行对象发布到MessageQueue 这又被Looper并发送回Handler进行加工 如果我发帖到Handler在我的活动中 是Activity Handler Me
  • 如何从 REstAssured 中的 Json 数组获取 JSON 对象

    任何人都可以帮我解决这个场景 我是新来的RestAssured和处理JSON在我们的自动化脚本中 我有一个API谁的回应是JSONArray i e id 1002 entity testcase fieldName TextName di
  • 如何告诉 Java SAX 解析器忽略无效字符引用?

    当尝试使用字符引用解析不正确的 XML 时 例如 x1 Java 的 SAX 解析器因致命错误而惨死 例如 org xml sax SAXParseException Character reference x1 is an invalid
  • 为什么 Libgdx 的 Table 不接受缩放操作?

    我在 libgdx 库中使用 scene2d 在游戏中创建一些 UI 我使用了一个表格 我想在用户触摸时采取一些缩放操作以使按钮触摸有意义 当我使用任何其他 Actor 类型 例如 Group 并为其提供缩放操作时 它可以工作 但不能工作表
  • 将 Class 对象转换为字节

    如果我有一个Class http java sun com j2se 1 5 0 docs api java lang Class html在运行时实例 我可以获得它的 byte 表示形式吗 我感兴趣的字节将在类文件格式 http java
  • Spring Data elasticsearch @Query 注解嵌套对象

    我有两节课 Document public class PracticeQuestion private int userId private List
  • 如何在其他窗口之上生成独立的 JFileChooser 对话框?

    Like 其他一些人 https stackoverflow com questions 4161207 javavm windows 7 64bit jfilechooser not showing dialog box谁问过类似的问题
  • 我可以从同一个 jar 文件执行两个不同的类吗?

    我有一个项目 在一个包中我制作了服务器 在第二个包中我制作了客户端 它运行良好 我想创建一个 Jar 文件 是否可以使用同一个 jar 文件分别运行客户端和服务器 我使用了只有一个 main 的 jar 文件 当我运行 jar 文件时 它会
  • Selenium Webdriver 中的 IF 语句

    我想知道是否有人可以帮助我解决我正在尝试解决的问题以及 Java 中 Webdriver 的 If 语句 当登录到我正在测试的应用程序时 可以在主页之前进入安全问题页面 如果是新用户等 我希望测试中的代码做的是 如果出现安全问题页面 请填写
  • 使用反射 API 填充 Proto 中的地图字段

    我正在尝试编写一个模块 该模块将获取 Message Builder 和从字段名称到值的映射 并将用值填充构建器 一切正常 直到我遇到地图字段 使用 Proto3 我收到一条特定消息 我知道我可以执行该消息的字段 builder b put

随机推荐

  • 如何在 C# 中禁用 CodeLens 的引用显示 [重复]

    这个问题在这里已经有答案了 我正在跟进某个线程 https stackoverflow com a 17848184 1525840提出某种方法 如下图所示 无法禁用该功能显示参考文献对于所有语言 当我发现这一点时 我尝试单独对 C 执行此
  • Web浏览器控件的window.external始终为null

    Web 浏览器的 Window External 对象始终为 null 要重现 请将 Web 浏览器放在新的 winform 上并输入 Option Strict Off Public Class Form1 Private Sub For
  • 省略 C++ 模板中的参数

    调用模板函数时可以省略函数名后面的类型吗 作为示例 请考虑以下函数 template
  • System.Move 和字符串数组

    我正在尝试将一些数组元素 字符串 移动到其他位置 当我使用System Move FastMM4 报告泄漏 这是一个显示问题的小片段 procedure TForm1 Button2Click Sender TObject type TAr
  • control.Show 和 BringToFront 之间有什么区别?

    显示 隐藏和 BringToFront SendToBack 有什么区别 在什么情况下我们应该使用一对而不是另一对 Show 相当于设置Visible true 它不会改变控件的 Z 顺序 如果控件被 Z 顺序前面的某个其他控件关闭 用户仍
  • Android BatteryManager 对所有属性检索调用返回 0

    我在尝试访问 Android 设备电池的大部分统计数据时遇到问题 例如BATTERY PROPERTY CAPACITY BATTERY PROPERTY CHARGE COUNTER or BATTERY PROPERTY CURRENT
  • 通过 user_id 获取 Google App Engine 用户

    In GAE http code google com appengine 你能查一下User http code google com appengine docs python users userclass html与 User 对象
  • 多台物理机上的 Vagrant VM

    我看到 Vagrant 有一个 AWS 插件 支持使用 Vagrant 来配置和运行多个 ec2 实例 AWS 之外是否存在此功能 使用示例 目前我在一台机器上有 5 个虚拟机 通过 VagrantFile 可以直接设置和管理 我现在可以访
  • 如何检查 Smarty 变量是否已分配?

    如何检查特定值是否已分配给 Smarty 以及是否未分配 默认 值 Answer if this gt cismarty gt get template vars test null this gt cismarty gt assign t
  • Quarkus 日志追踪,相当于 Spring Cloud Sleuth

    日志跟踪是非常重要的事情 所以我稍微研究了一下这段代码 将请求 ID 与响应 ID 进行匹配 连接 这适用于跟踪来自 来自我的 ws rs 资源的请求响应 Provider public class LoggingFilter implem
  • 为什么内部 Lua 字符串以它们的方式存储?

    我想要一个简单的字符串表来存储一堆常量 我想 嘿 Lua 可以做到这一点 让我使用其中的一些函数 这主要在lstring h lstring c文件中 我使用的是5 2 我先展示我好奇的代码 它来自 lobject h Header for
  • 如何将图像从本机反应发送到本机模块?

    Problem 我正在尝试将一组图像 保存在本地资源文件夹的 javascript 端 发送到本机端 iOS 和 Android 本机端处理图像并返回新图像 这是有效的 因为我尝试发送图像 URL 使用基于互联网的图像而不是本地图像 并且本
  • 除了snow SOCK之外的集群并行计算

    最近 R2 14 中添加的对并行计算的直接支持在我脑海中引发了一个问题 在 R 中创建集群有很多选项 我使用snow定期进行SOCK集群 但我知道还有其他方式 例如MPI 我用的是SOCKsnow集群 因为我不需要安装任何额外的软件 我使用
  • Facebook FQL 流限制?

    我想了解我的墙的完整历史 但我似乎在六月的某个时候就达到了极限 我进行了多次这样的调用 SELECT created time message FROM stream WHERE source id MY USER ID LIMIT 50
  • AWK 使用标题拆分大型 CSV 文件并根据列值打印输出文件

    我有一个大约 800 mb 的 CSV 文件 需要使用 AWK 对其进行拆分 该文件有一列 其中包含 ID 我想用它来分割文件 我熟悉 知道如何使用 Perl 完成此任务 但不熟悉 AWK 因为我只使用过几次 在 perl 中 我将使用 T
  • IIS 仅要求特定文件夹的登录凭据

    我在 IIS 7 上有一个网站 其中有几个子文件夹 该站点是使用 net 2 构建的 并以集成模式在池中运行 除了名为 Reports 的文件夹下的所有 aspx 文件外 整个网站运行良好 当用户尝试访问该文件夹下的任何 aspx 页面时
  • 启动期间自动挂载单独分区时 systemd/udev 依赖失败

    编辑 当我尝试使用带有任何安装点的单独分区时 而不仅仅是使用单独的分区时 就会发生这种情况 var 我正在使用 Buildroot 构建嵌入式 Linux 系统 我尝试为 var 使用单独的分区 但任何安装点都会发生这种情况 我的init系
  • 当我 Assembly.Load 肯定存在的程序集时,为什么会出现 FileNotFoundException?

    在我的 Windows Azure 角色 C 代码中 我执行以下操作 Assembly Load Microsoft WindowsAzure ServiceRuntime and FileNotFoundException被抛出 问题是存
  • Matplotlib 样式表未应用

    我一直在尝试几种样式表 但似乎没有一个适用于画布 这是我第一次使用twinx 所以也许这就是问题所在 我尝试过的代码如下 import pickle import numpy as np import matplotlib pyplot a
  • 如何让主线程等待ThreadPoolExecutor中其他线程完成

    我正在使用 ThreadPoolExecutor 在我的 Java 应用程序中实现线程 我有一个 XML 我需要解析它并将其每个节点添加到线程中以执行完成 我的实现是这样的 parse ip 是创建的线程池对象 ParseQuotes XM