gpt4 book ai didi

java - 什么情况会导致 Java 线程意外返回?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:24 26 4
gpt4 key购买 nike

这个问题出现在我正在开发的分布式多线程应用程序中,其中线程可能会在分布式任务执行期间随机返回。假设此应用程序中的每个线程都使用与以下 block 相同的基本代码:

public class ExecutionThread extends Thread{
@Override
public void run(){
while(true){
try{
//task submitter app dumps all Tasks in to a queue. We retrieve
//those tasks here one-by-one and run them:
Task t = priorityBlockingQueue.take();

//execute is abstract, so it could potentially do anything here:
t.execute();
} catch(Throwable e){
//task submitter app will be able to access the Throwable later:
t.setUncaughtThrowable(e);
}
}
}
}

我应该注意到 Task 类是抽象的并且非常简单 - 它只有抽象的 execute() 方法,所以我觉得没有必要在这里发布它的代码。

我知道 JVM 中可能会发生一些疯狂的事情,但这段代码对我来说似乎相当安全,因为线程永远不会返回,除非它运行的 JVM 死机。实际上,我们看到线程仍然返回而它们各自的 JVM 并未死亡并且无法查明原因。更糟糕的是,我们看不到这些线程的控制台,因为它们是作为子进程在远程机器上产生的。我们已经尝试记录 throwable,但没有任何内容被打印到文件中。关于什么仍然可能导致此线程返回的任何想法?

最佳答案

catch 子句中必须有一个Exception

关于java - 什么情况会导致 Java 线程意外返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9265872/

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