宣告開啟執行緒的方式
使用執行緒池的情況
捕獲非同步執行緒異常的常用方式
thread
不使用執行緒池
1.thread.setdefaultuncaughtexceptionhandler
設定預設的執行緒異常處理器。
2.thread例項.setuncaughtexceptionhandler
給當指定執行緒設定執行緒異常處理器。
thread
使用執行緒池executorservice#execute
1.thread.setdefaultuncaughtexceptionhandler
設定預設的執行緒異常處理器。
2.自定義threadpoolexecutor, 重寫afterexecute方法
,在afterexecute方法中感知異常。
3.自定義threadfactory
, 重寫newthread方法,給執行緒工廠生產出來的thread例項設定uncaughtexceptionhandler
。
thread
使用執行緒池executorservice#submit
自定義threadpoolexecutor, 重寫afterexecute方法
,在afterexecute方法中感知異常。
runnable
不使用執行緒池
1.thread.setdefaultuncaughtexceptionhandler
設定預設的執行緒異常處理器。
2.thread例項.setuncaughtexceptionhandler
給當指定執行緒設定執行緒異常處理器。
runnable
使用執行緒池executorservice#execute
1.thread.setdefaultuncaughtexceptionhandler
設定預設的執行緒異常處理器。
2.自定義threadpoolexecutor, 重寫afterexecute方法
,在afterexecute方法中感知異常。
3.自定義threadfactory
, 重寫newthread方法,給執行緒工廠生產出來的thread例項設定uncaughtexceptionhandler
。
runnable
使用執行緒池executorservice#submit
自定義threadpoolexecutor, 重寫afterexecute方法
,在afterexecute方法中感知異常。
callable
不使用執行緒池
在使用future#get()方法獲取callable#call()的返回結果時, try-catch獲取異常
。
注:此方式,若不使用future#get()獲取結果,那麼 非同步執行緒的異常資訊將會被吞掉。
callable
使用執行緒池executorservice#submit
自定義threadpoolexecutor, 重寫afterexecute方法
,在afterexecute方法中感知異常。
提示:
thread不使用執行緒池:
thread使用執行緒池executorservice#execute:
thread使用執行緒池executorservice#submit:
runnable不使用執行緒池:
runnable使用執行緒池executorservice#execute:
runnable使用執行緒池executorservice#submit:
callable不使用執行緒池:
callable使用執行緒池executorservice#submit:
^_^ 如有不當之處,歡迎指正
^_^ 測試**託管鏈結
^_^ 本文已經被收錄進《程式設計師成長筆記》,筆者justrydeng
執行緒池中捕獲執行緒執行異常
在專案中使用執行緒池時,使用了如下方式 executorservice datauploadpool executors.newfixedthreadpool writethreadnum datauploadpool.execute new thread task 但是這種方式下,主線程無法捕獲子...
Task異常捕獲的幾種方式
wait result 在呼叫task的wait 方法或result屬性處會丟擲task中的異常。使用continuewith捕獲異常 如果不可以在內部捕獲,可以使用continuewith 方法捕獲異常 var t task.run continuewith t1 return t1 unwrap...
如何主線程捕獲子執行緒的異常
第乙個 子執行緒類 public class threadexceptionrunner implements runnable 第二步 主線程類 在最後面有我自定義的兩個class是作為配置用的,有解釋 public class demothread 1 首先 實現乙個 thread.uccaug...