java - 重新抛出异常的ExecutorService

标签 java exception executorservice executor rethrow

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

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

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

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

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

最佳答案

我认为仅使用 Executors 不可能做到这一点。
您可以考虑在任务中使用 try-catch block ,并将异常添加到 catch block 中的队列中。

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
            }
    }

关于java - 重新抛出异常的ExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39065031/

相关文章:

java - JVM 命令行选项

java - JPA在MySQL数据库中保存错误的日期

完成传输后 Java 套接字文件损坏

c++ - 由于异常而展开时处理 C++ 析构函数中的 pthread 取消点

java - 类中的列表处理

python - 使用 Exception.__init__(self) 来处理用户定义的异常

exception - Dart 中的 Java 'throws' 关键字

java - 如何捕获 java fx 应用程序中的任务异常?

java - 我需要处理 executorservice 中的异常吗

java - Java 进程的 HealthChecker