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实现相关推荐

  1. java runnable 异常_Java实现多线程异常捕获Runnable的案例

    这篇文章主要介绍了详解Java中多线程异常捕获Runnable的实现的相关资料,希望通过本文能帮助到大家,让大家理解掌握这样的知识,需要的朋友可以参考下 详解Java中多线程异常捕获Runnable的 ...

  2. java runnable 异常_详解Java中多线程异常捕获Runnable的实现

    详解Java中多线程异常捕获Runnable的实现 1.背景: Java 多线程异常不向主线程抛,自己处理,外部捕获不了异常.所以要实现主线程对子线程异常的捕获. 2.工具: 实现Runnable接口 ...

  3. Java多线程-Thread、Runnable、Executor

    线程分为五个阶段:创建.就绪.运行.阻塞.终止. 创建:新建一个线程对象,如Thread thd=new Thread(). 就绪:创建了线程对象后,调用了线程的start()方法(此时线程只是进入了 ...

  4. Java多线程异常抛出后的表现及捕获

    一.多线程抛出异常后并不影响主线程及其他子线程的正常执行 public static void main(String[] args) {System.out.println("Main T ...

  5. Java多线程:捕获线程异常

    你处理过多线程中的异常吗?如何捕获多线程中发生的异常?捕获子线程的异常与捕获当前线程的异常一样简单吗? 除了try catch.Java中还可以通过异常处理器UncaughtExceptionHand ...

  6. JAVA多线程Thread VS Runnable详解

    进程与线程 进程是程序在处理机中的一次运行.一个进程既包括其所要执行的指令,也包括了执行指令所需的系统资源,不同进程所占用的系统资源相对独立.所以进程是重量级的任务,它们之间的通信和转换都需要操作系统 ...

  7. Java多线程中的Runnable和Thread

    摘要: 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的r ...

  8. 【Java多线程】实现Runnable接口方式 / 继承Thread类方式;使用synchronized锁实现线程安全;线程安全的懒汉式单例模式;死锁问题示例

    Thread 的生命周期 一.实现Runnable接口方式 1.在 run 方法中使用 synchronized 块 /*** 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的 ...

  9. Java多线程 - Thread和Runnable的区别

    在这我们就不在讲解Thread和Runnable的用法,如果不会的可以去看上一篇文章:<Java实现多线程的几种方式> Runnable是接口. Thread是一个类,继承了Runnabl ...

最新文章

  1. adb: unable to connect for root: more than one device/emulator
  2. 设计模式之命令模式(Command)摘录
  3. 如何每天自动备份 SourceSafe (转)
  4. java.lang包怎么用_java.lang.io包的使用
  5. python【5】-生成式,生成器
  6. 使用Pandas 1.1.0进行稳健的2个DataFrames验证
  7. python 编辑距离_最小编辑距离python
  8. lucene 建索引
  9. MFC初探 —— 设置软件开机自启
  10. 多线程和并发管理 .NET多线程服务
  11. 腾讯地图api php经纬度转换地址,腾讯地图经纬度转换为百度地图经纬度PHP类
  12. 菜刀之中国蚁剑-安装使用及下载地址
  13. matlab全局变量和局部变量和子函数
  14. java jpa是什么_什么是JPA?
  15. Ubuntu安装NVDIA显卡驱动,CUDA及cuDNN
  16. 计算机组成原理实验移位运算,移位运算实验
  17. 每周一喂丨图说WiFi安全
  18. php返回503,网站返回503是什么意思
  19. Java实现计数排序
  20. 2、股权融资 - 打造企业上市系列文章

热门文章

  1. java rotate怎么用_jQuery旋转插件jqueryrotate用法详解
  2. mysql数据库改成支持中文_修改Mysql编码支持中文
  3. java中的语句有哪些_java中的循环语句有哪些
  4. NS3使用过程中重要内容整理
  5. POE交换机供电原理及工作过程
  6. 【渝粤题库】国家开放大学2021春4988电子政务概论题目
  7. 遥控开关在云智能物联网领域:智能养殖高效、生态、安全!
  8. cryptojs支持rsa加密_新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接
  9. excel数据命令导入mysql_如何将EXCEL数据导入MYSQL
  10. .net webservice studio调用方法传参_springboot整合WebService简单版