从ExecutorService中的异常中恢复

时间:2014-12-03 10:19:46

标签: java multithreading executorservice

我使用ExecutorService来执行我的逻辑。如下所示,run方法应该在无限循环中执行。简而言之,run方法是消息使用者,它应该从队列中删除消息并处理消息。但是,doSomething()方法遇到异常,并且永远不会返回。经过分析,我意识到doSomething()方法中有一个NullPointer。虽然,我已经处理了这个异常,但是我如何确保循环永远不会终止,尽管有任何运行时异常。我无法承受我的Runnable任务不起作用。它会停止整个功能。

 ExecutorService service = Executors.newSingleThreadExecutor()
    service.submit(new Runnable(){
        public void run(){
          while(true){
           doSomething();
       }
    }
  })

2 个答案:

答案 0 :(得分:2)

尝试在循环中捕获异常,如下所示:

ExecutorService service = Executors.newSingleThreadExecutor();
service.submit(new Runnable(){
    public void run(){
      while(true){
       try {
            doSomething();
       } catch (Exception e) {
           //log exception etc...
       }
   }
}
});

答案 1 :(得分:1)

使用try / catch来捕获run方法的内容,捕获每个异常。

 ExecutorService service = Executors.newSingleThreadExecutor()
    service.submit(new Runnable(){
        public void run(){
          while(true){
             try {
               doSomething();
             } catch (Exception e) {
               handleException();
             }
       }
    }
  })