1. 程式人生 > >執行緒的異常捕獲與執行緒池的異常捕獲 execute與submit區別

執行緒的異常捕獲與執行緒池的異常捕獲 execute與submit區別

https://www.cnblogs.com/wscit/p/6100476.html

#(單執行緒情況)

對於單執行緒來說,只需要重寫UncaughtException就好了,如下:

123456789/*** Author: scw* Time: 16-11-24*/public class RewriteUncatchtExceptionHandler implements Thread.UncaughtExceptionHandler{public void uncaughtException(Thread t, Throwable e) {System.out.println("我捕獲到了執行緒池的異常"
);}}
12345678910/*** Author: scw* Time: 16-11-24*/public class Task implements Runnable {public void run() {System.out.println("執行任務");int num  = Integer.parseInt("TT");}}
1234567/*** 對於單個執行緒出現的異常情況可以使用異常處理器,可以捕獲到*/public static void catchSingleThread() {Task task = new Task();Thread thread = new Thread(task);
thread.setUncaughtExceptionHandler(new RewriteUncatchtExceptionHandler());     thread.start(); }

  執行程式,我們發現可以正常的捕獲到這個unchecked異常,但是執行緒池中我們應該怎麼處理呢?如下:

#(執行緒池)

首先我們要重寫 ThreadFactory來為每個執行緒例項化的時候建立一個handler

123456789101112/*** Author: scw* Time: 16-11-24*/public class MyThreadFactory implements ThreadFactory{
public Thread newThread(Runnable r) {Thread t = new Thread(r);t.setUncaughtExceptionHandler(new RewriteUncatchtExceptionHandler());System.out.println("Thread[" + t.getName() + "] created.");return t;}}

這個地方還可以setDemon,使執行緒池內執行緒皆為守護執行緒,主執行緒退出後,強制銷燬執行緒池

12345678/*** 雖然從寫ThreadFactory以後,可以捕獲到異常,但是隻能是execute,而submit還是不行  how to choose one*/public static void catchedExecutor() {ExecutorService executorService = Executors.newCachedThreadPool(new MyThreadFactory());executorService.execute(new Task());executorService.shutdownNow();}

  現在問題來了,就是這樣雖然可以捕獲到異常,但是隻能是使用execute的時候可以,使用submit的時候是不成功的,那麼我們應該如何選擇呢?

相關推薦

學習日記0910線程進程 同步調用異步調用 函數回調

pid urn sleep call 解耦 __name__ .get ESS con 前提:線程池與進程池一般與同步調用與異步調用一起使用,而函數回調一般與異步調用一起使用 同步調用   提交完一個任務後,在原地等待,直到任務完完整整的運行完,得到返回的結果之後,再運行下

事務 資料庫連線【c3p0】 DBUtiles學習筆記

1.事務 開啟事務:start transaction; 回滾事務:rollback; 提交事務: commit; 關閉自動提交事務:setAutoCommit(false); 1.1事務的特性ACID【面試】 1.原子性【A】:事務包含的邏輯不可分割 一致性【C】:事務執行前後,資料完

事務資料庫連線DBCP和C3P0工具類DBUtils

文章目錄 事務 使用命令列方式演示事務。 使用程式碼方式演示事務 事務的特性 事務的安全隱患 讀未提交 演示 讀已提交演示 可序列化

執行異常捕獲執行異常捕獲 executesubmit區別

https://www.cnblogs.com/wscit/p/6100476.html#(單執行緒情況)對於單執行緒來說,只需要重寫UncaughtException就好了,如下:123456789/*** Author: scw* Time: 16-11-24*/publ

執行捕獲執行執行異常

在專案中使用執行緒池時,使用瞭如下方式: ExecutorService dataUploadPool = Executors.newFixedThreadPool(writeThreadNum); dataUploadPool.execute(new

Android中的執行執行

執行緒與執行緒池 概括 執行緒分為主執行緒和子執行緒. 主執行緒主要是用來處理和介面相關的事情, 子執行緒主要是用來做耗時的操作,比如 載入遠端資料,資料庫操作等。 在android 中,處理直接使用 Thread以外。 android 還提供了很多類似執行緒的操作便於我們

第三十八天 GIL 程序執行

今日內容: 1.GIL 全域性直譯器鎖 2.Cpython直譯器併發效率驗證 3.執行緒互斥鎖和GIL對比 4.程序池與執行緒池 一.全域性直譯器鎖   1.GIL:全域性直譯器鎖     GIL本質就是一把互斥鎖,是夾在直譯器身上的     統一程序內的所有執行緒都需要先搶到GIL鎖,才能執

併發新特性—Executor 框架執行

蘭亭風雨 · 更新於 2018-11-14 09:00:31 併發新特性—Executor 框架與執行緒池 Executor 框架簡介 在 Java 5 之後,併發程式設計引入了一堆新的啟動、排程和管理執行緒的API。Executor 框架便是 Java 5 中引入的,其內部使用了執行緒池機

執行的建立執行ThreadPoolExecutor,Executors

                    執行緒的建立與執行緒池及執行緒池工具類 1.執行緒的建立方式 1.1繼承Thread類重寫run方法 public class Test { p

java中執行的生命週期執行中斷

執行緒池生命週期包括: RUNNING:接收新的任務並處理佇列中的任務 SHUTDOWN:不接收新的任務,但是處理佇列中的任務 STOP:不接收新的任務,不處理佇列中的任務,同時中斷處理中的任務 TIDYING:所有的任務處理完成,有效的執行緒數是0 TE

關於執行執行過程中,業務邏輯出現未知異常導致執行中斷問題反思

關於執行緒池執行過程中,業務邏輯出現未知異常導致執行緒中斷問題反思 最近在專案研發中的關於執行緒池應用過程中由於業務邏輯異常導致的執行緒中斷,但程式未中斷導致的髒資料問題  話不多說,在最近最新的一個版本釋出過程中,業務需要,我們要定期去給客戶預留出可用的資源資料,提供客戶使用,在

33 python Threading模組執行 執行 GIL鎖

---恢復內容開始--- 一 python Threading模組與執行緒   multiprocess模組完全模仿了threading模組的介面,二者在使用層面有較大的相似處。 1. 執行緒的建立 from threading import Thread def func(m)

【JVM第九篇】:Executor框架執行

Executor框架簡介 在Java 5之後,併發程式設計引入了一堆新的啟動、排程和管理執行緒的API。Executor框架便是Java 5中引入的,其內部使用了執行緒池機制,它在java.util.cocurrent 包下,通過該框架來控制執行緒的啟動、執行和關閉,可以簡化併發程式設計

執行 技術點 目錄 1. 執行作用: 提升效能 1 2. 使用流程 1 3. 執行執行的監控 jvisual 1 4. 執行常用方法 2 5. 執行相關概念 2 5.1. 佇列

 池與執行緒池 技術點   目錄 1. 執行緒池作用:  提升效能 1 2. 使用流程 1 3. 執行緒與執行緒池的監控  jvisual 1 4. 執行緒常用方法 2 5. 執行緒池相關概念 2 5.1. 佇列 &n

c++11多執行執行

最近需要開發一個高效能運算庫,涉及到c++多執行緒的應用,上次做類似的事情已經是4年多以前了,印象中還頗有些麻煩。悔當初做了就算了,也沒想著留點記錄什麼的。這次又研究了一番,發現用上c++11特性之後,現在已經比較簡單了,在此記錄一下。   最簡單的多執行緒情況,不涉及公共變數,各個執行緒之間獨

執行執行

1.Callable和Runnable I    Callable定義的方法是call,而Runnable定義的方法是run。 II   Callable的call方法可以有返回值,而Runnable的run方法不能有返回值。 III  Callable的call方法可丟擲異常,而Runnable的ru

再入鎖,執行安全佇列執行串想

題中這三者是有一環扣一環的聯絡的,在此做一個總結加深理解。 再入鎖Reentrantlock主要是和synchronized關鍵字作區別,都是加鎖但是排程單位不同。synchronized是以呼叫次數為單位,即被synchronized修飾的方法或者程式碼塊每被執行緒執行一次,都有一個獲取鎖釋放

Java多執行核心技術(六)執行執行異常

本文應注重掌握如下知識點: 執行緒組的使用 如何切換執行緒狀態 SimpleDataFormat 類與多執行緒的解決辦法 如何處理執行緒的異常 1.執行緒的狀態 執行緒物件在不同執行時期有不同的狀態,狀態資訊就處於State列舉類中,如圖所示: 執行緒狀態 初始(NEW):新建立了一個執行緒物件,但還

Java面向物件執行綜合實驗(二)之 異常處理

理解異常的基本概念;瞭解Java異常的層次結構;熟悉並掌握Java異常的捕獲處理方法。 (1)閱讀Java™ Platform, Standard Edition 8 API Specification文件,瞭解後續程式設計中將要處理的IOException及其子類FileNotFoundE

Hystrix 服務的隔離策略對比,訊號量執行隔離的差異

支援的隔離策略 Hystrix支援的 hytrix支援執行緒池隔離和訊號量隔離 訊號量的隔離:  it executes on the calling thread and concurrent requests are limited by the semaphore count  - 引自