gpt4 book ai didi

java - 在 Thread.run 中处理 java 异常

转载 作者:行者123 更新时间:2023-11-29 04:46:10 24 4
gpt4 key购买 nike

我有一个扩展Thread的内部类

private class TestStart extends Thread {
public void run() {
try {
startServer();
}
catch (Exception e) {
/// How to handle it?
}
}
}

主线程中的调用者:

public void start() throws Exception {
Thread st = new TestStart();
st.start();
}

方法 startServer() 通过其 API 抛出异常,因此我必须使用 try-catch,因为 Thread.run() 不会在方法定义中“抛出”异常。我需要将捕获的异常冒泡到主线程中来处理它。有简单的方法吗?谢谢

最佳答案

如果您使用 ExecutorService 而不是使用原始线程,您会收到未捕获异常的通知:

class MyCallable implements Callable<Void> {
@Override public Void call() throws Exception {
// Do something - you don't need to catch Exception as Callable throws it.
// ...

return null; // A return is necessary from a Callable.
}
}

在某处创建一个执行器服务,例如:

ExecutorService executor = Executors.newFixedThreadPool(1);

然后,在启动线程的代码中:

Future<?> future = executor.submit(new MyCallable());

try {
future.get(); // Blocks until the Callable completes.
} catch (ExecutionException e) {
// You reach here if an exception is thrown in the Callable -
// The exception is accessible via e.getCause().
}

关于java - 在 Thread.run 中处理 java 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37037086/

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