我对我的代码有疑问。
我有两个线程从主方法运行,我想捕获主方法中两个线程中任何一个线程中可能发生的异常。
Future<Object> incoming=Executors.newSingleThreadExecutor().submit(new Task1(param1));
Future<Object> outgoing=Executors.newSingleThreadExecutor().submit(new Task2(param2));
问题是,如果我使用 Future 对象并调用 get() 方法来处理异常,它将阻塞我的代码并且我不知道线程 2 是否在线程 1 之前完成/抛出异常。
我怎样才能优雅地处理这个而不是这个?
while(!(incoming.isDone() || outgoing.isDone())){}
最佳答案
如果您想在异常发生时立即处理而不是等待任何其他任务完成,我会异步处理异常。
ExecutorService oneService = ...
oneService.submit(new Runnable() {
public void run() {
try {
new Task(param1).run();
} catch(Exception e) {
// handle exception asynchronously
}
}
});
关于java - 从java中的线程中获取异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650812/