1. 程式人生 > >java執行緒異常的處理

java執行緒異常的處理

Run()方法不允許throw exception,所有的異常必須在run方法內部處理。

java多執行緒程式中,所有執行緒都不允許丟擲未捕獲checked exception,即各個執行緒需要自己處理checked exceptionJava通過為java.lang.Runnable.run()方法生命沒有throw exception 部分進行了約束。所以對於checked exception可通過在run()方法內部try catch處理掉。但是對於unchecked exception,就需要用到Thread裡面的setUncaughtExceptionHandler(UncaughExceptionHandler)

,此方法可用來處理一些unchecked exception

原始碼如下:

public void setUncaughtExceptionHandler(UncaughtExceptionHandler paraUncaughtExceptionHandler){

checkAccess();

this.uncaughtExceptionHandler = paraUncaughtExceptionHandler;

}

UncaughtExceptionHandler 是一個介面,宣告如下:

public static abstract interface UncaughtExceptionHandler{

public abstract void uncaughtException(Thread paramThread, Throwable paramThrowable);

}

在異常發生的時候,我們傳入的UncaughtExceptionHandler 引數的uncaughtException()方法會被呼叫。

綜上所述,實現handle unchecked exception的方法具體步驟如下:

1、定義一個類實現UncaughtExceptionHandler 介面。在實現的方法裡包含對異常處理的邏輯和步驟。

2、定義執行緒執行結構和邏輯。這一步和普通執行緒定義一樣。

3、在建立和執行該子執行緒的方法中,在

thread.start()語句前增加一個thread.setUncaughtExceptionHandler語句來實現處理邏輯的註冊。

相關推薦

java執行異常處理

Run()方法不允許throw exception,所有的異常必須在run方法內部處理。 在java多執行緒程式中,所有執行緒都不允許丟擲未捕獲checked exception,即各個執行緒需要自己處理checked exception。Java通過為java.lang.

c#中的多執行異常處理

1.對於Thread操作的異常處理 public static void Main() {   try   {     new Thread (Go).Start();   }   catch (Exception ex)   {     // We'll never ge

執行異常處理

JAVA 主執行緒中建立子執行緒,子執行緒出現異常,如何處理呢? 線上程內種的run()方法中處理對異常進行try catch 捕獲 程式碼如下,異常類 public class TestThread implements Runnable {

執行 異常處理(通用)

1 public class ChildThread implements Runnable { 2 private static ChildThreadExceptionHandler exceptionHandler; 3 4 static { 5 except

Java中的執行通訊、執行組、未處理執行異常

執行緒通訊 傳統的執行緒通訊 假設現在系統中有兩個執行緒,這兩個執行緒分別代表存款者和取錢者,而系統有一種特殊的要求,系統要求存款者和取錢者不斷地重複存款、取錢的動作,而且要求每當存款者將錢存入指定賬戶後,取錢者就立即取錢。不允許存款者和取錢者操作連續超過兩次。 為了實現這種功能

深度解析Java執行池的異常處理機制

前言 今天小夥伴遇到個小問題,執行緒池提交的任務如果沒有catch異常,那麼會拋到哪裡去,之前倒是沒研究過,本著實事求是的原則,看了一下程式碼。 正文 小問題 考慮下面這段程式碼,有什麼區別呢?你可以猜猜會不會有異常打出呢?如果打出來的話是在哪裡?: ExecutorSe

java執行池中任務異常處理

首先我們看個例子,當使用執行緒池執行任務時如果某個任務出現異常會是什麼效果 import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecut

Java執行未捕獲異常處理

public void mainGroup() throws InterruptedException { Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {

總結下java執行池的處理策略

執行緒池 任務提交給執行緒池之後的處理策略: 如果當前執行緒池中的執行緒數目<corePoolSize,則每來一個任務,就會建立一個執行緒去執行這個任務; 如果當前執行緒池中的執行緒數目>=corePoolSize,則每來一個任務,會嘗試將其新增到任務快取隊列當中,若

執行組中分組執行處理非受控異常

執行緒組中分組執行緒、處理非受控異常 準備工作 實現過程 工作原理 更多關注 分組執行緒是Java併發API中一個有趣的功能。此功能將一組執行緒作為一個獨立單元,並且能夠對組裡執行緒物件操作提供使用權。例如,如果你想控制一些執行相同任務的

Java執行洩露的分析與處理

1. 生產環境的異常現象及初步分析 最近發現系統程式記憶體消耗越來越大,開始並沒特別注意,就簡單調了一下jvm引數。但直到前些天記憶體爆滿,持續Full GC,這肯定出現了記憶體洩露。 原以為哪裡出現了比較低階的錯誤,所以很直接想到先去看看程式是在跑哪段程式碼。jstac

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

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

java執行異常的捕獲

在多執行緒中,如果子執行緒丟擲了異常,在main中並不能捕獲到; 看一個例子 package _Executors; import java.util.concurrent.ExecutorService; import java.util.concurrent.Exe

Java執行均勻處理同一個List中的資料

需求:使用多執行緒來處理同一個List中的資料,希望每個執行緒處理的數量是均勻的 事例程式碼如下: public class Test { static class HandleThread extends Thread { private Str

建立Java執行的兩種方式和執行異常

一.使用多執行緒的兩種方法  使用多執行緒的兩種方法有:繼承Thread類和實現runable介面。 二.繼承Thread類 來看一下thread類的原始碼:  class Thread implements Runnable { 首先可以看出thread類也是實現Runable介面的run方法如下:

java執行處理和序列處理的效率比較以及結果

多執行緒還是單執行緒處理任務需要關注的內容是單個任務執行消耗的時間,下面以一個公式進行說明,假設一個任務的執行時間為T(progress),執行緒切換的平均時間為T(change),任務執行時間所佔的比例 S=T(progress)/(T(progress) +T(chan

如何用java執行池做分批次查詢處理 java執行池ThreadPoolExecutor的使用

需求是在一個大資料量的表中按條件查詢出資料後做相應的業務。我是使用的java執行緒池ThreadPoolExecutor,實現分批次去查詢,查詢到資料後,又分多個執行緒去做業務。 執行緒池類為 java.util.concurrent.ThreadPoolExecutor,

java執行安全之synchronized鎖重入及出現異常鎖自動釋放(五)

科技快訊       11月16日下午訊息,以“Bring AI to Life”為主題的2017百度世界大會今天在北京國貿大酒店和北京嘉裡大酒店舉行。愛奇藝創始人兼CEO龔宇在大會上發表了主題為“愛奇藝·更懂娛樂”的主題演講,龔宇表示愛奇藝對於科技的重視與百

Java執行池ExecutorService時讓主執行等待子執行完成後繼續處理

(() -> { try { System.out.println(finalI + " 我執行了。。。"); Thread.sleep(5000L);

java執行併發處理之阻塞佇列LinkedBlockingQueue用法

<pre name="code" class="java">public class ThreadRelatedService2 { // key point: records list must be ordered public void