亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java多線程之多線程異常捕捉

2019-11-26 15:00:41
字體:
來源:轉載
供稿:網友

  一:為什么要單獨講多線程的異常捕捉呢?

先看個例子:

public class ThreadException implements Runnable{  @Override  public void run() {    throw new RuntimeException();  }  //現象:控制臺打印出異常信息,并運行一段時間后才停止  public static void main(String[] args){    //就算把線程的執行語句放到try-catch塊中也無濟于事    try{      ExecutorService exec = Executors.newCachedThreadPool();      exec.execute(new ThreadException());    }catch(RuntimeException e){      System.out.println("Exception has been handled!");    }  }}

  在run中手動拋出了一個運行時異常,在main中啟動線程,catch語句塊中捕捉下異常,捕捉到打印一句話。運行結果如下圖:

  發現異常被拋到了控制臺,沒有打印catch塊中的語句。

  結論:多線程運行不能按照順序執行過程中捕獲異常的方式來處理異常,異常會被直接拋出到控制臺(由于線程的本質,使得你不能捕獲從線程中逃逸的異常。一旦異常逃逸出任務的run方法,它就會向外傳播到控制臺,除非你采用特殊的形式捕獲這種異常。),這樣會讓你很頭疼,無法捕捉到異常就無法處理異常而引發的問題。

  于是,我們一定會想如何在多線程中捕捉異常呢?

二、多線程中捕捉異常

  我們來按照下面的步驟完成這次實驗:

  1.定義異常處理器

   要求,實現 Thread.UncaughtExceptionHandler的uncaughtException方法,如下:

/* * 第一步:定義符合線程異常處理器規范的“異常處理器” * 實現Thread.UncaughtExceptionHandler規范 */class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler{  /*   * Thread.UncaughtExceptionHandler.uncaughtException()會在線程因未捕獲的異常而臨近死亡時被調用   */  @Override  public void uncaughtException(Thread t, Throwable e) {    System.out.println("caught  "+e);  }}

  2.定義使用該異常處理器的線程工廠

/* * 第二步:定義線程工廠 * 線程工廠用來將任務附著給線程,并給該線程綁定一個異常處理器 */class HanlderThreadFactory implements ThreadFactory{  @Override  public Thread newThread(Runnable r) {    System.out.println(this+"creating new Thread");    Thread t = new Thread(r);    System.out.println("created "+t);    t.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());//設定線程工廠的異常處理器    System.out.println("eh="+t.getUncaughtExceptionHandler());    return t;  }}

  3.定義一個任務,讓其拋出一個異常

/* * 第三步:我們的任務可能會拋出異常 * 顯示的拋出一個exception */class ExceptionThread implements Runnable{  @Override  public void run() {    Thread t = Thread.currentThread();    System.out.println("run() by "+t);    System.out.println("eh = "+t.getUncaughtExceptionHandler());    throw new RuntimeException();  }}

  4.調用實驗

/* * 第四步:使用線程工廠創建線程池,并調用其execute方法 */public class ThreadExceptionUncaughtExceptionHandler{  public static void main(String[] args){    ExecutorService exec = Executors.newCachedThreadPool(new HanlderThreadFactory());    exec.execute(new ExceptionThread());  }}

  運行結果如下圖:

三、結論

  在java中要捕捉多線程產生的異常,需要自定義異常處理器,并設定到對應的線程工廠中(即第一步和第二步)。

四、拓展

  如果你知道將要在代碼中處處使用相同的異常處理器,那么更簡單的方式是在Thread類中設置一個靜態域,并將這個處理器設置為默認的未捕獲處理器。

這個處理器只有在不存在線程專有的未捕獲異常處理器的情況下才會被調用。

public static void main(String[] args){    Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());    ExecutorService exec =Executors.newCachedThreadPool();    exec.execute(new ExceptionThread());}

以上就是本文針對Java多線程之多線程的異常捕捉的全部內容,本文如有理解錯誤地方,歡迎批評改正。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女在线观看一区| 欧美激情精品久久久久| 久久久亚洲精品视频| 国产自摸综合网| 亚洲欧洲一区二区三区在线观看| 精品露脸国产偷人在视频| 国产成人综合精品| 亚洲一二在线观看| 亚洲国产精品yw在线观看| 91精品视频在线播放| 欧美日韩在线观看视频| 欧美另类老女人| 久久久99久久精品女同性| 亚洲一区二区三区777| 成人免费黄色网| 国产精品久久久久9999| 国产欧美日韩专区发布| 欧美午夜无遮挡| 疯狂做受xxxx欧美肥白少妇| 日韩av手机在线观看| 久久大大胆人体| 日韩欧美精品网站| 成人写真视频福利网| 国产精品久久久久久久7电影| 97在线观看免费| 亚洲成人av片| 中文字幕亚洲一区二区三区五十路| 91在线|亚洲| 不卡毛片在线看| 亚洲欧美日韩在线一区| 69**夜色精品国产69乱| 久久午夜a级毛片| 亚洲天堂免费观看| 亚洲成人在线视频播放| 欧美视频中文在线看| 国产精品1区2区在线观看| 国产精品成人观看视频国产奇米| 亚洲欧美另类在线观看| 午夜免费在线观看精品视频| 一本色道久久88综合日韩精品| 成人黄色在线播放| 久久久女人电视剧免费播放下载| 亚洲精品自拍偷拍| 日韩中文字幕精品视频| 91精品久久久久久久久青青| 午夜剧场成人观在线视频免费观看| 国产伦精品一区二区三区精品视频| 国产精品1区2区在线观看| 尤物九九久久国产精品的分类| 日韩在线国产精品| 欧美精品成人91久久久久久久| 黑人与娇小精品av专区| 欧美人在线观看| 精品久久久久久久久久国产| 久久精品亚洲一区| 国产精品久久久久久久电影| www欧美xxxx| 日韩av男人的天堂| 在线观看亚洲区| 亚洲午夜小视频| 久青草国产97香蕉在线视频| 一区二区三区视频免费| 欧美黄色性视频| 国产精品户外野外| 国内精品久久久久影院 日本资源| 91国自产精品中文字幕亚洲| 久热精品在线视频| 国产69精品久久久久9999| 国产一区二区三区久久精品| 亚洲欧美中文字幕在线一区| 国产在线视频2019最新视频| 狠狠久久亚洲欧美专区| 日韩av电影手机在线| 97超级碰在线看视频免费在线看| 久久精品国产成人| 国产中文欧美精品| 日韩亚洲在线观看| 久久人人爽人人爽人人片av高清| 日日骚久久av| 综合网中文字幕| 黑人狂躁日本妞一区二区三区| 欧美做爰性生交视频| 中文欧美在线视频| 午夜精品久久久久久久男人的天堂| 久久99久久99精品中文字幕| 国产精品大陆在线观看| 精品视频—区二区三区免费| 久久五月天色综合| 91精品国产自产91精品| 欧美精品18videos性欧美| 久久琪琪电影院| 亚洲精品视频在线观看视频| 97视频在线看| 精品精品国产国产自在线| 欧美裸体xxxx极品少妇| 亚洲精品久久久久久久久久久| 欧美一级片一区| 国产欧美亚洲精品| 2023亚洲男人天堂| 国产精品女主播| 欧美在线免费观看| 久久久久国产视频| 91精品国产高清久久久久久| 国产精品久久久久久搜索| 亚洲国产精品网站| 91伊人影院在线播放| 国产午夜精品视频| 国产一区二区三区高清在线观看| 国产精品v日韩精品| 日韩精品久久久久久福利| 久久天天躁狠狠躁夜夜躁2014| 2019中文字幕免费视频| 欧美视频免费在线| 日韩在线观看免费高清完整版| 欧美性黄网官网| 亚洲欧美日韩另类| 最好看的2019的中文字幕视频| 在线观看中文字幕亚洲| 91av视频在线观看| 国产999精品| 欧美成人合集magnet| 亚洲国产成人一区| 欧美日韩综合视频网址| 亚洲区在线播放| 日韩欧美成人网| 成人精品久久一区二区三区| 亚洲成av人乱码色午夜| 热久久免费视频精品| 午夜精品福利视频| 成人精品福利视频| 欧美日韩国产精品一区二区不卡中文| 97视频国产在线| 精品无人国产偷自产在线| 亚洲人成在线播放| 91国内免费在线视频| 国产日韩欧美成人| 7777精品久久久久久| 国产精品自产拍在线观看| 亚洲成人av中文字幕| 欧美精品一区在线播放| 中文字幕一区二区三区电影| 欧美精品免费看| 国产aⅴ夜夜欢一区二区三区| 成人亚洲激情网| 97国产在线观看| 国产91免费看片| 久久精品视频中文字幕| 亚洲mm色国产网站| 欧美怡春院一区二区三区| 精品久久久久久中文字幕| 26uuu日韩精品一区二区| 亚洲iv一区二区三区| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品成人国产乱一区| 亚洲国产精品免费| 欧美午夜久久久| 欧美激情一级二级| 国产精品久久久久久久午夜| 国产成人精品免高潮费视频| 91久久久国产精品| 欧美激情va永久在线播放| 欧美激情按摩在线| 国产精品91视频| 中文字幕精品久久|