新聞中心
這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
在Java子線程中怎么對(duì)異常進(jìn)行處理-創(chuàng)新互聯(lián)
這篇文章給大家介紹在Java子線程中怎么對(duì)異常進(jìn)行處理,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
常見(jiàn)錯(cuò)誤
也許有人會(huì)覺(jué)得,很簡(jiǎn)單嘛,直接在父線程啟動(dòng)子線程的地方try ... catch一把就可以了,其實(shí)這是不對(duì)的。
原因分析
讓我們回憶一下Runnable接口的run方法的完整簽名,因?yàn)闆](méi)有標(biāo)識(shí)throws語(yǔ)句,所以方法是不會(huì)拋出checked異常的。至于RuntimeException這樣的unchecked異常,由于新線程由JVM進(jìn)行調(diào)度執(zhí)行,如果發(fā)生了異常,也不會(huì)通知到父線程。
public abstract void run()
解決辦法
那么,如何在父線程中捕獲來(lái)自子線程的異常呢?樓主想到了3種常用方法,分享給大家。
方法一:子線程中try... catch...
最簡(jiǎn)單有效的辦法,就是在子線程的方法中,把可能發(fā)生異常的地方,用try ... catch ... 語(yǔ)句包起來(lái)。子線程代碼:
public class ChildThread implements Runnable { public void run() { doSomething1(); try { // 可能發(fā)生異常的方法 exceptionMethod(); } catch (Exception e) { // 處理異常 System.out.println(String.format("handle exception in child thread. %s", e)); } doSomething2(); } }
本文標(biāo)題:在Java子線程中怎么對(duì)異常進(jìn)行處理-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://www.dlmjj.cn/article/dgeejo.html