0

我需要使用 anyExecutor或执行任务ExecutorService。任务(CallableRunnable)应该无限运行,但如果出现任何异常,它应该被重新抛出到提交任务的线程。

我知道这future.get()会为我抛出ExecutionException

  ExecutorService executor = Executors.newSingleThreadExecutor();
  Future<?> future = executor.submit(new Task());
  future.get();

但是,在晴天的情况下future.get(),我会无限期地阻塞,所以我不能使用它。

当底层任务失败时,是否有可能Executor简单地抛出异常?

4

1 回答 1

1

我认为仅使用 Executors 是不可能做到这一点的。
您可以考虑在 Task 中使用 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
            }
    }
于 2016-08-21T15:07:09.557 回答