Java 多线程异常捕获Runnable实现
生活随笔
收集整理的這篇文章主要介紹了
Java 多线程异常捕获Runnable实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、背景:
??????? Java 多線程異常不向主線程拋,自己處理,外部捕獲不了異常。所以要實現主線程對子線程異常的捕獲。
2、工具:
??????? 實現Runnable接口的LayerInitTask類,ThreadException類,線程安全的Vector
3、思路:
?????? 向LayerInitTask中傳入Vector,記錄異常情況,外部遍歷,判斷,拋出異常。
4、代碼:
??????
package step5.exception;import java.util.Vector; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit;import com.autonavi.pds.core.incre.impl.LayerInitTask;public class ThreadException {public static void main(String[] args) {try {Vector<String> errRet = new Vector();ExecutorService pool = Executors.newFixedThreadPool(6);for (int i = 0; i < 6; ++i) {pool.execute(new LayerInitTask(i, errRet));}pool.shutdown();pool.awaitTermination(1, TimeUnit.DAYS);if (errRet.size() > 0) {System.out.println("根據返回值捕獲:exception");throw new RuntimeException( "入庫失敗!");}} catch (Exception e) {System.out.println("根據拋出異常捕獲:exception");throw new RuntimeException( "入庫失敗!");}System.out.println("-----入庫成功,發成功完成工作郵件--------");}}package step5.exception;import java.util.Vector;public class LayerInitTask implements Runnable {private int threadNum;private Vector<String> errRet;public LayerInitTask(int num, Vector<String> errRet) {this.threadNum = num;this.errRet = errRet;}@Overridepublic void run() {try {if (this.threadNum == 3) {throw new RuntimeException( this.threadNum + ":數據格式有誤.");}System.out.println(this.threadNum + ":刷表成功");} catch (Exception e) {this.errRet.add("線程:" + this.threadNum + "運行異常!");throw new RuntimeException( this.threadNum + ":刷表失敗");}}}
5、結果:
Exception in thread "pool-1-thread-4" java.lang.RuntimeException: 3:刷表失敗at step5.exception.LayerInitTask.run(LayerInitTask.java:23)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)at java.lang.Thread.run(Unknown Source) Exception in thread "main" java.lang.RuntimeException: 入庫失敗!at step5.exception.ThreadException.main(ThreadException.java:27) 2:刷表成功 1:刷表成功 5:刷表成功 0:刷表成功 4:刷表成功 根據返回值捕獲:exception 根據拋出異常捕獲:exception總結
以上是生活随笔為你收集整理的Java 多线程异常捕获Runnable实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PostgreSQL数据库修改sql表的
- 下一篇: linux 环境变量设置方法总结(PAT