重新抛出异常

时间:2016-08-21 13:59:34

标签: java exception-handling executorservice executor rethrow

我需要使用任何ExecutorExecutorService执行任务。任务(CallableRunnable)应该无限运行,但是如果有任何异常,应该重新提交给提交任务的线程。

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

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

但是,在阳光灿烂的日子里,我无限期地阻挡了future.get(),所以我无法使用它。

当底层任务失败时,是否有可能只是抛出异常的Executor

1 个答案:

答案 0 :(得分: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
            }
    }