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. 一:HDFS 用户指导
  2. 「要拼就拼运维」5分钟一台?它让我爱上工作了!
  3. Linux系统环境查看已经登录用户信息及管理
  4. Android android:screenOrientation的简介
  5. threejs设置对象层次
  6. php将图片导入,php中图片文件的导入,上传与下载
  7. 20130418代码
  8. saspython知乎_sas比spss好用在哪里?
  9. Material使用09 MdCheckboxModule、MdMenuModule、MdTooltipModule
  10. ERROR 1290 (HY000): The MySQL server is running withnbs
  11. ListView中嵌套checkbox
  12. android mat分析,android内存泄露MAT分析心得与注意点
  13. 去哪里学习行业知识?
  14. Python安装shapely包出现WindowsError: [Error 126]解决方案
  15. (一)八卦起点作家转会纵横-------- 比较全(包括JJ,起点ceo.邪月MM的发言的发言)...
  16. 仿知乎悬浮功能按钮FloatingActionButton
  17. 计算机主板的结构平面草图,10分钟浓缩10年 教你看懂主板基本结构
  18. cpu满载寿命_CPU的使用寿命大概有多少年,多久迭代一次为佳?
  19. RHCE考试——佩琦
  20. javaScript(正则,DOM)

热门文章

  1. 世界机器人冠军王宇航_★​身边的榜样,为你喝彩:我校学子摘冠第七届河南省VEX U机器人挑战赛...
  2. 代码拾取图片某一点的颜色_RPG游戏开发日志7:道具拾取与存放
  3. HTML5怎样设置站点,我是怎样让网站用上HTML5 Manifest
  4. android monitor不能查看/data目录
  5. PCM设备在雷达通信系统应用
  6. 工业以太网交换机的重要技术参数分析
  7. 亿佰特电源模块:无线通信模块电平转换指南
  8. html的段落标志中 标注行中断,?HTML的段落标志中,标注行中断的是?
  9. spring mail 发送html simple,SpringBoot整合Mail邮件发送
  10. 三星ml1660拆机图解_炫龙DD2拆机,高性能的背后是怎样的面容?