2015-11-23 87 views
1

是否有可能停止一個org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor當一個非捕獲異常拋出,以及如何做到這一點?停止ThreadPoolTask​​Executor異常

例如,當MyCustomException被拋出,我想停止線程和捕獲異常在主線程:

taskExecutor.execute(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      int i = 1/0; 
     } catch (Exception e) { 
      throw new MyCustomException(e); 
     } 
    } 
}); 
+0

爲什麼要牛逼o停止執行者?這將使所有使用該執行程序的人停止,甚至可能會破壞您的應用程序。 –

+0

你可以使用回調。給Runnable一個對所需處理程序的引用並調用它的方法。 – Fildor

回答

1

由於您使用的匿名內部類,這應該足夠了:

taskExecutor.execute(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      int i = 1/0; 
     } catch (Exception e) { 
      onExceptionInTask(new MyCustomException(e)); // <== Inform main. 
     } 
    } 
}); 

這是一個方法調用中的「主」類:

protected void onExceptionInTask(MyCustomException e){ 
    // do your thing like stop all tasks ... 
} 
相關問題