这篇文章主要介绍了详解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 errRet = new Vector();

ExecutorService pool = Executors.newFixedThreadPool(6);

for (int i = 0; i 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 errRet;

public LayerInitTask(int num, Vector errRet) {

this.threadNum = num;

this.errRet = errRet;

}

@Override

public 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 异常_Java实现多线程异常捕获Runnable的案例相关推荐

  1. Java中非法参数的异常_Java中的异常

    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...

  2. java运行时异常与非运行时异常_java 运行时异常与非运行时异常理解

    所谓的异常就是阻止当前程序或方法继续执行的问题. java异常分为两种:运行时异常(RuntimeException)和非运行时异常(CheckedException)也叫检查式异常. 1.运行时异常 ...

  3. java 负数异常_java基础之异常

    一.Throw(抛出异常,让调用者处理) Throw(将异常抛给调用者) 在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象.那么,抛出一个异常具体如何操作呢? 1. 创建一个异常 ...

  4. java的数据异常_java的各种异常

    展开全部 Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表 ...

  5. java常见检查异常_java中常见异常总汇,附解释

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

  6. java trrows处理_java 19 -2 异常以及tr...catch()的方法处理异常

    1 /* 2 异常:程序出现了不正常的情况.3 4 举例:今天天气很好,班长出去旅游.骑着自行车,去山里面呼吸新鲜空气.5 Error:6 问题1:山路塌陷了,班长及时停住了,但是过不去了.严重的问题 ...

  7. java 手动线程调度_Java Thread 多线程 操作线程

    5.线程的创建和启动 A.继承Thread类或实现Runnable接口,重写或实现run方法,run方法代表线程要完成的任务 B.创建Thread子类或是Runnable的实现类,即创建的线程对象:不 ...

  8. classcastexception异常_Java 最全异常讲解

    Java知其所以然 导引问题 实际工作中,遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数 ...

  9. java 捕获异常顺序_Java基础:异常捕获顺序

    public voidtestException(){ int a[] = {1,2,3};int q = 0; try{ for(int i=0;i }catch(ArithmeticExcepti ...

最新文章

  1. 连接网络计算机后用户名更改不,电脑修改ip后无法上网
  2. 脑科学真的可以启发AI吗?
  3. 如何在自定义数据源组件中限制用户的更改
  4. 用ajax更新div,如何使用ajax和jquery更新特定的div
  5. 数据库系列之T-SQL(触发器)
  6. 《机器学习导论》和《统计机器学习》学习资料:张志华教授
  7. java中拷贝文件的代码_拷贝文件夹中的所有文件到另外一个文件夹
  8. 被字句15个_文旅部重新认定国级非遗保护单位,潮州15项花落谁家?这些非遗你都认得吗?...
  9. 【QT】QT从零入门教程(十六):QSS样式表
  10. java array使用_Java_ArrayLit详细用法
  11. Java通过JNI/JNA加载dll库文件调用C接口,出现“java.lang.UnsatisfiedLinkError:包名.类.方法(参数)”问题
  12. Jmeter录制脚本介绍
  13. 网课查课插件 支持 60类型+ 彩虹查课插件 网络查课查询
  14. 2020公务员考试应届毕业生的身份界定
  15. win10怎么手动修改自己的IP地址
  16. 麦德龙的商品供应链管理
  17. 管路流体仿真matlab,MathWorks 在 Simscape 中新增建模和仿真流体系统功能
  18. 招投标舞弊的22种方式及案例
  19. HTML+CSS+JS网页设计期末课程大作业(家居网)
  20. 高学历就意味着高薪资?低学历转行3D建模,游戏建模成为首选

热门文章

  1. 【Elasticsearch】es Ingest 节点
  2. 【Elasticsearch】使用 Elasticsearch Freeze index API 创建冻结索引
  3. 【java】强悍!Java 9 中的9个新特性
  4. Spark SQL 和 Hive UDF ExceptionInInitializerError getRemoteBlockReaderFromTcp BlockReaderFactory
  5. 一女程序员被判 9 个月:因薪酬等问题离职,rm -f * 删库,瘫痪 6 个小时
  6. 多线程环境下,HashMap为什么会出现死循环?
  7. Swagger天天用,但它背后的实现原理很多人都不知道!
  8. MySQL关联查询时,我们为什么建议小表驱动大表?
  9. eclipse目录发布到tomcat对应的目录
  10. 格式化输出,while循环,运算符,初识编码