重新抛出异常的 ExecutorService
ExecutorService that rethrows exceptions
我需要使用 Executor
或 ExecutorService
执行任务。任务(Callable
或 Runnable
)应该无限地 运行,但如果出现任何异常,它应该重新抛出给提交任务的线程。
我知道 future.get()
会为我抛出 ExecutionException
:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future = executor.submit(new Task());
future.get();
但是,在晴天的情况下,我会无限期地阻止 future.get()
,所以我无法使用它。
是否可以有任何 Executor
在底层任务失败时简单地抛出异常?
我认为仅使用执行器是不可能做到这一点的。
您可以考虑在任务中使用 try-catch 块,并将异常添加到 catch 块中的队列中。
try{
//perform task
}catch(Exception e){
queue.offer(e)
}
创建一个从队列中读取异常的线程。
public void run() {
Exception e;
try {
e = q.take();
e.printStackTrace();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
}
}
我需要使用 Executor
或 ExecutorService
执行任务。任务(Callable
或 Runnable
)应该无限地 运行,但如果出现任何异常,它应该重新抛出给提交任务的线程。
我知道 future.get()
会为我抛出 ExecutionException
:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future = executor.submit(new Task());
future.get();
但是,在晴天的情况下,我会无限期地阻止 future.get()
,所以我无法使用它。
是否可以有任何 Executor
在底层任务失败时简单地抛出异常?
我认为仅使用执行器是不可能做到这一点的。
您可以考虑在任务中使用 try-catch 块,并将异常添加到 catch 块中的队列中。
try{
//perform task
}catch(Exception e){
queue.offer(e)
}
创建一个从队列中读取异常的线程。
public void run() {
Exception e;
try {
e = q.take();
e.printStackTrace();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
}
}