如何处理不停止线程的行为不良的库

2023-12-27

处理在库关闭时无法正确清理线程的第三方库时,有哪些解决方法?

许多库显式或隐式地公开其中包含的代码的生命周期方法。例如,Web 应用程序框架存在于 Servlet 容器中的 Web 应用程序上下文中。创建上下文时,框架可能会出于各种原因启动一些线程。

现在,进一步举例,当 servlet 容器或 Web 应用程序上下文关闭时,Web 应用程序框架应该终止所有这些线程。要么执行服务 http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html由库创建的线程应该被关闭,或者应该采取一些其他方法来停止这些线程。

最坏的情况是线程非守护线程 https://stackoverflow.com/questions/2213340/what-is-daemon-thread-in-java。这些实际上会阻止 Java 进程的终止。但即使它们是守护线程,允许线程继续也可能是不好的做法。如果(回到示例)servlet 容器嵌入到其他代码中,则其他代码可能会继续运行,而线程仍然在运行,这可能会导致问题。

没有公开的编程方法来停止这些线程,那么可以做什么呢?

如果您使用这样的第三方库,有哪些方法可以强制关闭现有线程?


如果您使用这样的第三方库,有哪些方法可以强制关闭现有线程?

一般来说,没有一种安全的方法可以保证在所有情况下都有效。最接近安全的解决方案是使用ThreadGroup枚举所有现有线程,并使用Thread.interrupt()告诉每个线程停止。当然,不能保证线程会注意,或者它们会干净地关闭以响应中断。

IMO,最好的策略是:

  • 如果线程不需要关闭cleanly,然后通过调用 System.exit() 拔掉 JVM 的插头

  • 如果需要彻底关闭线程以避免损坏的可能性,那么不要使用该库......或自己解决问题。

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

如何处理不停止线程的行为不良的库 的相关文章

  • 仅使用公钥在 HD 钱包中生成以太坊地址 (bitcoinj/web3j)

    我尝试为使用 bitcoinj 库实现的 HD 钱包密钥生成以太坊地址 但我感到困惑 DeterministicSeed seed new DeterministicSeed some seed code here null 1409478
  • Java:while循环冻结程序

    我正在制作一个游戏 我需要每 3 秒更新一次 JProgressBar 为此 我使用 while 循环 问题是我的程序由于 while 循环而冻结 我在其他问题中读到它 他们没有帮助我解决这个问题 我不知道如何解决 这是我的代码 publi
  • 如何在c#中指定时间后取消后台工作者

    如何在 C 中的指定时间后取消后台工作程序或取消无响应的后台工作程序 看看这个教程 http www albahari com threading part3 aspx http www albahari com threading par
  • 始终等待页面加载到 PageObjects 上

    因此 当出现问题时 我只是创建了一个简单的 selenium JBehave 代码 我将首先发布简化的代码 然后稍后解释我的问题是什么 所以这里我们有一个简单的 AbstractClass 它将在我的 PageObjects 上继承 此类仅
  • NIO 直接缓冲区何时以及如何被释放?

    我有一个 C 库 需要一个临时缓冲区作为暂存空间 我正在考虑将直接字节缓冲区的地址传递给它 在最终释放缓冲区之前 是否允许虚拟机重新定位缓冲区 JNI 框架消失后 本机库将保留该指针 我的理解是 JNI 本地对象引用无法缓存 因为 VM 可
  • WSDL2Java 抛出无法找到主类:org.apache.axis.wsdl.WSDL2Java

    我正在尝试从远程 Web 服务创建 java 文件 我下载了axis 1 4 将lib文件夹复制到c data axis lib其中包含这些文件 axis jar 轴 ant jar commons discovery 0 2 jar co
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • 为什么不自动装箱泛型的 Java 基本类型?

    Java 不允许在通用数据结构中使用原始类型 例如 不允许使用 ArrayList 原因是 原始类型不能直接转换为Object 然而 Java 1 5 确实支持自动装箱 并且包装类在通用数据结构中工作 那么为什么编译器不能将其自动装箱到 A
  • Eclipse Oxygen - 该项目未构建,因为其构建路径不完整

    我刚刚安装了 Eclipse Oxygen 并尝试在工作台中打开现有项目 但收到此错误 该项目未构建 因为其构建路径不完整 不能 找到 java lang Object 的类文件 修复构建路径然后尝试 建设这个项目 我尝试右键单击该项目 转
  • 如何在线程创建和退出时调用函数?

    include
  • java.lang.ClassNotFoundException: org.jboss.logging.Logger

    我有一个奇怪的问题 我有一个JMS https en wiktionary org wiki JMS客户端应用程序和MDB https en wikipedia org wiki Enterprise JavaBeans Message d
  • 将 Maven 控制台与 m2eclipse 一起使用

    Maven 新手在这里 有没有办法在 Eclipse 中打开控制台并在 M2Eclipse 插件上执行 Maven 命令 这是一个非常好的插件 但我环顾四周 没有找到我想要的一些功能 谢谢 如果你想运行特定的maven插件 你可以这样做 g
  • Log4j 2.0 中发现 ClassNotFoundException

    我已经设置了 log4j12 api beta2 jar 的构建路径 但它给出了 以下错误请帮我解决这个问题我的代码如下 java 文件 package com sst log4j class Product private int pro
  • SQlite 获取最近的位置(带有纬度和经度)

    我的 SQLite 数据库中存储有纬度和经度的数据 我想获取距我输入的参数最近的位置 例如我当前的位置 纬度 经度等 我知道这在 MySQL 中是可能的 并且我已经做了相当多的研究 SQLite 需要一个自定义外部函数来实现半正弦公式 计算
  • Java DNSLookup MX 记录列表。类似于 MXToolBox

    我正在构建一个程序来列出域的所有 MX 记录 起初似乎工作正常 但与在线工具进行比较后http mxtoolbox com http mxtoolbox com 有些域程序无法获取 MX 记录 而 MXToolbox 可以 我不确定原因是什
  • Eclipse Juno 指标插件

    Eclipse JUNO 版本有哪些 Eclipse 指标插件 我尝试了一些通用指标插件 但没有一个能够在 Eclipse 的 JUNO 版本中正常运行 差点忘了 我们正在使用 Java 作为编程语言 我想要诸如圈复杂度 代码行数 方法长度
  • 背景图像隐藏其他组件,例如按钮标签等,反之亦然

    如何解决此代码中组件的隐藏问题 代码运行没有错误 但背景图片不显示 如何更改代码以获取背景图像 使用验证方法时 它在validation 中创建错误 public class TEST public TEST String strm Jan
  • java中什么是静态接口?

    我正在阅读Map Entry界面 当我注意到它是一个static界面 我不太明白什么是静态接口 它与常规接口有什么不同 public static interface Map Entry
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • 需要在没有wsdl的情况下调用soap ws

    我是网络服务的新手 这个网络服务是由 siebel 提供的 我需要调用一项网络服务 我的客户向我提供了以下详细信息 这是 SOAP 对于产品 请使用它作为端点 Request

随机推荐

  • 反转字典中键值对的顺序(Python)[重复]

    这个问题在这里已经有答案了 在Python中如何反转字典的键值对的顺序 例如 我有这本字典 a 1 b 2 c 3 我想反转它 以便它返回 c 3 b 2 a 1 有没有我没听说过的功能可以做到这一点 有些代码行也很好 字典没有任何顺序感
  • 为什么写入变量会改变其范围?

    采取以下代码示例 var True def func1 if var print True else print False var True func1 这打印True正如人们所期望的那样 但是 如果我取消注释 var True 我收到错
  • 启动 Oracle SQL*Plus 时 TNS 协议适配器错误

    每当我尝试登录 SQLPlus 11g 标准版 Windows 64 时 我都会收到与某些连接错误相关的错误 我尝试以 sys 作为 sysdba 登录并提供密码 所有服务都启动了 我使用的是 Windows 7 任何帮助 将不胜感激 Tr
  • C++前向声明问题

    我有一个包含一些前向声明的头文件 但是当我在实现文件中包含头文件时 它会在之前的前向声明的包含之后被包含 这会导致这样的错误 error using typedef name std ifstream after class usr inc
  • 在哪里可以获得 pldbgapi.sql 以便安装 postgresql 调试器?

    我正在尝试在 Linux 上安装 postgresql 调试器 以便我可以使用 pgAdmin 来调试我的函数 我已经设置了我的postgresql conf文件 然而 我找不到pldbgapi sql Postgresql 安装在 usr
  • sklearn:TFIDF Transformer:如何获取文档中给定单词的 tf-idf 值

    I used sklearn用于计算文档的 TFIDF 词频逆文档频率 值 使用命令如下 from sklearn feature extraction text import CountVectorizer count vect Coun
  • 如何获取数组的大小? [复制]

    这个问题在这里已经有答案了 在 C 中 我使用嵌入到我想要获取其大小的数组中的 Length 属性 在 C 中如何做到这一点 这实际上取决于 数组 的含义 C 中的数组的大小 现在指的是 原始 字节大小 等于一项大小的 N 倍 通过这一点
  • Silverlight 4 HttpWebRequest 抛出 ProtocolViolationException

    我通过 http 调用 REST 服务 该服务返回一个流作为响应 我的客户端代码如下所示 Uri uri new Uri remoteAddress var webRequest HttpWebRequest WebRequest Crea
  • 如何使用mask计算直方图OPENCV?

    我只需要计算图像的一部分的直方图 但这部分具有圆形形状 如圆盘 我创建蒙版来找到图像上的该部分 cv2 rectangle mask 0 0 width height 0 0 0 1 cv2 circle mask int avgkrug
  • 如何从错误:监听 EADDRINUSE 中释放 localhost

    我正在Windows 7上测试用nodejs编写的服务器 当我尝试在命令行中运行测试器时 出现以下错误 Error listen EADDRINUSE at errnoException net js 614 11 at Array 0 n
  • 反序列化 JSON 并访问元素

    我有以下代码 dynamic stuff JsonConvert DeserializeObject Name Jon Smith Address A B C Age 42 var name stuff Name MessageBox Sh
  • “ResourceCycle”类型问题的说明:生成签名的 Apk 时

    更新到 appcompat v7 24 0 0 alpha1 后生成签名的 apk 时出现错误 Error Error Style Resource definition cycle TextAppearance AppCompat Lig
  • 卷积神经网络 - 如何获取特征图?

    I read a few books and articles about Convolutional neural network it seems I understand the concept but I don t know ho
  • href 内有小胡子

    我有这样的 JSON something http something com 和 HTML 像这样 a href something something a 当我应用 Mustache 时 我得到 a href 7B 7Bsomethin
  • 如何从批处理文件中仅删除空目录

    有没有办法从批处理文件中删除给定目录下的所有空子目录 或者是否可以递归复制目录 但排除任何空目录 你确实有两个问题 1 有没有办法从批处理文件中删除给定目录下的所有空子目录 是的 这个一行 DOS 批处理文件对我有用 您可以传入模式 roo
  • 多线 lambda 比较器

    我从 Java 中的 lambda 表达式开始 有一些我认为很奇怪的东西 我确信我做错了什么或者它有解决方法 要定义比较器 我可以这样做 col setComparator CustomCell o1 CustomCell o2 gt Co
  • 我们最终可以在企业软件中转向 DVCS 吗? SVN 仍然是开发的“必备”吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 零大小 malloc [重复]

    这个问题在这里已经有答案了 非常简单的问题 我编写了以下程序 include
  • 实时查询/聚合数百万条记录 - hadoop?数据库?卡桑德拉?

    我有一个可以并行化的解决方案 但我 还 没有 hadoop nosql 的经验 并且我不确定哪种解决方案最适合我的需求 理论上 如果我有无限的 CPU 我的结果应该立即返回 因此 任何帮助将不胜感激 谢谢 这是我所拥有的 数千个数据集 da
  • 如何处理不停止线程的行为不良的库

    处理在库关闭时无法正确清理线程的第三方库时 有哪些解决方法 许多库显式或隐式地公开其中包含的代码的生命周期方法 例如 Web 应用程序框架存在于 Servlet 容器中的 Web 应用程序上下文中 创建上下文时 框架可能会出于各种原因启动一