gpt4 book ai didi

Java打破无限循环

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:32:50 25 4
gpt4 key购买 nike

我在生产环境中遇到特殊情况,其中一段特定代码进入无限循环。原因大多是数据特定的,无法找出真正的原因。与此同时,我希望做的是产生一个单独的子线程来执行那段代码,如果它执行了超过 30 秒,我想停止该子线程执行

Thread t = new Thread() {
public void run() {
// This is where i will the method that runs in a infinite loop
callMethodThatRunsInInfiniteLoop();
};
};

t.start();
try {
t.join(2000); // wait 2s
} catch (InterruptedException e) {
e.printStackTrace();
}

// if not completed how to break the child thread ???

最佳答案

unfortunately no it is a thirdparty code, and will not be able to change it so easily.

听起来您正在尝试解决第三方库中的问题……或者您的代码调用带有错误输入的第三方库或其他问题。

我的建议是解决那个问题,而不是试图杀死错误的线程。如果您做不到,那么您有两个选择:

  • 将第 3 方库修改为中断感知/响应,然后使用它来停止它,或者

  • 尝试找到一种方法“进入”第 3 方库的数据结构(例如,使用讨厌的反射)并使其停止运行。

如果您采用后者,那么也许您还应该考虑在单独的 JVM 中运行第 3 方库,以便您可以使用 Process API 强制终止它。


话虽如此,在有限的情况下 Thread.stop()实际上(可能)可以安全使用。基本上,如果错误线程不创建子线程,不与其他线程交互,不共享数据结构,并且在您杀死它时不能进行类初始化,那么您可能 会很安全。问题是有太多理论上的场景可以停止线程可能会造成损害,很难知道您是否考虑了所有这些场景。

关于Java打破无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874414/

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