gpt4 book ai didi

java - 如何在给定 ThreadInfo 对象的情况下中断()线程?

转载 作者:行者123 更新时间:2023-11-30 03:13:05 24 4
gpt4 key购买 nike

我遇到一种情况,需要在应用程序运行时进行一些线程清理。 (这很大程度上是由于库设计选择造成的,不幸的是,这超出了我的控制范围。)

我无权访问任何相关的 java.lang.Thread实例,因为线程是在我的代码控制之外创建的。这意味着例如Java Thread Primitive Deprecation中建议的简单方法, How to Stop a ThreadHow can I interrupt a thread created from within a method?并没有真正帮助我,因为它们都依赖于 Thread 实例可用或可能可用。

确实但是有(全新的)代码调用 ThreadMXBean.dumpAllThreads() ,返回 ThreadInfo []。这看起来是清理的一个很好的起点,因为返回的数组为我提供了确定哪些特定线程(如果有)需要清理所需的所有信息。

据我了解,我想做的是调用Thread.interrupt() 。例如,参见How exactly do I interrupt a thread? 。问题在于,仅给出 ThreadInfo 对象,我似乎找不到任何方法来做到这一点。

综上所述,我准备提出问题:

如何从 ThreadInfo 对象获取相应的 Thread 对象,以便可以调用 Thread 对象实例上的方法?

或者, 在仅给出描述线程的 ThreadInfo 对象的情况下,在线程上有效调用 Thread.interrupt() 的其他方法是什么?

建议的解决方案最好适用于 Java 7 和 Java 8。它们需要适用于 Java 8。

有什么建议吗?

最佳答案

在 ThreadInfo 中,您有线程 ID,因此您可以使用它来获取对线程的引用。

阅读此内容 question关于如何做到这一点。

我会做这样的事情:

ThreadInfo[] threadInfos = ....;
Set<Long> tIds = new HashSet<>();
for (ThreadInfo tIndo : threadInfos) {
tIds.add(tIndo.getId());
}
for (Thread t : Thread.getAllStackTraces().keySet()) {
if(tIds.contains(t.getId()) {
t.interrupt();
}
}

关于java - 如何在给定 ThreadInfo 对象的情况下中断()线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33233325/

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