ExecutorService之submit與execute

ExecutorService的submit與execute方法都能執行任務,但在使用過程,發現其對待run方法拋出的異常處理方式不一樣。
兩者執行任務最后都會通過Executor的execute方法來執行,但對于submit,會將runnable物件包裝成FutureTask,其run方法會捕捉被包裝的Runnable Object的run方法拋出的Throwable異常,待submit方法所返回的的Future Object調用get方法時,將執行任務時捕獲的Throwable Object包裝成java.util.concurrent.ExecutionException來拋出。

而對于execute方法,則會直接拋出異常,該異常不能被捕獲,想要在出現異常時做些處理,可以實現Thread.UncaughtExceptionHandler接口:

class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler{
 public void uncaughtException(Thread t, Throwable e) {
 System.out.println(\"caught \"+e);
 }
}

class HandlerThreadFactory implements ThreadFactory{
 public Thread newThread(Runnable r) {
 Thread t=new Thread(r);
 t.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
 return t;
 }
}

ExecutorService exec=Executors.newCachedThreadPool(new HandlerThreadFactory())
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文是我自己在秋招復習時的讀書筆記,整理的知識點,也是為了防止忘記,尊重勞動成果,轉載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 11,334評論 4 56
  • 文章摘要:在業務系統中,線程池框架技術一直是用來解決多線程并發的一種有效方法。 在JDK中,J.U.C并發包下的T...
    癲狂俠閱讀 2,133評論 2 21
  • 引言 在日常的開發工作當中,線程池往往承載著一個應用中最重要的業務邏輯,因此我們有必要更多地去關注線程池的執行情況...
    Java耕耘者閱讀 824評論 0 0
  • 什么是死鎖?如何避免 所謂死鎖:是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外...
    廣告被屏蔽閱讀 359評論 0 0
  • 目錄:一、Java 基礎二、容器三、多線程四、反射五、對象拷貝六、異常七、設計模式八、網絡編程 歡迎評論留言,文章...
    mumuxi_閱讀 791評論 0 13