1当线程的线程体内部无捕获异常,将异常抛出线程体外,不同情况下,程序处理机制

测试类

 package com.ehking.bankchannel.domesticremit.facade.impl;

 import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors; public class ThreadTest { private static Executor executor=Executors.newCachedThreadPool(); public static void main(String[] args) {
test01();
//test02();
} /**
* 线程池,主线程往线程池提交任务(子线程)
* 如果任务中有往外抛出异常,主线程并不会捕获异常。
* 是线程池捕获了任务的异常
*/
public static void test02(){ ThreadTask aTask=new ThreadTask(1);
ThreadTask aTask2=new ThreadTask(2);
ThreadTask aTask3=new ThreadTask(6);
List<ThreadTask> aList=new ArrayList<ThreadTask>();
aList.add(aTask);
aList.add(aTask2);
aList.add(aTask3);
try {
for(ThreadTask a:aList){
executor.execute(a);
}
System.out.println("ThreadTest.test02(没有执行)");
} catch (Exception e) {
System.out.println("ThreadTest.test02()"+e);
} }
/**
* 如果用匿名线程,匿名线程中有抛出异常,无捕获的话,主线程是会捕获这个异常
*/
public static void test01(){
System.out.println("ThreadTest.test01()==>主线程运行开始");
final List<String> list=new ArrayList<String>();
try {
list.add("sxf");
list.add("chn"); Thread thread=new Thread(new Runnable() { @Override
public void run() {
System.out
.println("ThreadTest.test01().new Runnable() {...}.run()子线程加爱");
list.add("love");
System.out
.println("ThreadTest.test01().new Runnable() {...}.run()子线程抛出异常");
int a=3/0;
System.out
.println("ThreadTest.test01().new Runnable() {...}.run()z县城结束");
}
});
thread.start(); } catch (Exception e) {
System.out.println("ThreadTest.test01()子线程抛出异常"+e);
} try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(String aString:list){
System.out.println("ThreadTest.test01()打印==>"+aString);
}
System.out.println("ThreadTest.test01()==>主线程运行结束");
}
}

线程类

 package com.ehking.bankchannel.domesticremit.facade.impl;

 public class ThreadTask implements Runnable{

     private int a;

     public ThreadTask(int a){
this.a=a;
} @Override
public void run() {
if(a%2==0){
System.out.println("ThreadTask.run()【"+a+"】运行正常.......");
}else{
System.out.println("ThreadTask.run()【"+a+"】抛出异常");
int s=2/0;
} } }

java多线程:线程体往外抛出异常的处理机制实践的更多相关文章

  1. Java多线程——线程的优先级和生命周期

    Java多线程——线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...

  2. Java多线程——线程之间的协作

    Java多线程——线程之间的协作 摘要:本文主要学习多线程之间是如何协作的,以及如何使用wait()方法与notify()/notifyAll()方法. 部分内容来自以下博客: https://www ...

  3. Java多线程——线程之间的同步

    Java多线程——线程之间的同步 摘要:本文主要学习多线程之间是如何同步的,如何使用volatile关键字,如何使用synchronized修饰的同步代码块和同步方法解决线程安全问题. 部分内容来自以 ...

  4. java 多线程—— 线程让步

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  5. java 多线程—— 线程等待与唤醒

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  6. Java多线程--线程及相关的Java API

    Java多线程--线程及相关的Java API 线程与进程 进程是线程的容器,程序是指令.数据的组织形式,进程是程序的实体. 一个进程中可以容纳若干个线程,线程是轻量级的进程,是程序执行的最小单位.我 ...

  7. Java多线程-线程的同步(同步方法)

    线程的同步是保证多线程安全访问竞争资源的一种手段.线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源.什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些 ...

  8. Java多线程——线程的创建方式

    Java多线程——线程的创建方式 摘要:本文主要学习了线程的创建方式,线程的常用属性和方法,以及线程的几个基本状态. 部分内容来自以下博客: https://www.cnblogs.com/dolph ...

  9. Java多线程——线程的死锁

    Java多线程——线程的死锁 摘要:本文主要介绍了Java多线程中遇到的死锁问题. 部分内容来自以下博客: https://www.cnblogs.com/wy697495/p/9757982.htm ...

随机推荐

  1. 请求库之requests,selenium

    requests模块 一.介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:reques ...

  2. Python3:Django连接Mysql数据库时出错,'Did you install mysqlclient or MySQL-python?'

    Python3:Django连接Mysql数据库时出错,'Did you install mysqlclient or MySQL-python?' 一.原因 因为Python版本问题,MySQLdb ...

  3. PHP练习题三

    1.用PHP打印出前一天的时间格式是2006-5-10 22:21:21. echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’)); 2.不使用第三个变量交换两个 ...

  4. Graph_Master(连通分量_B_Trajan+完全图)

    hdu_4635 题目大意:给出一张DAG(n个点,m条边),求出能加的最大边数,使得该图无重边,无自环,非强连通. 题解:这题题面很好理解,也没有什么很难的点,主要是如何求出最大边数需要动点脑筋.首 ...

  5. Windows安装Ubuntu桌面操作系统到移动硬盘中以及错误解决

    用到的工具:U盘一个(usb3.0,你懂的),移动硬盘(我这个是笔记本里面取出来的机械硬盘装上的盒子) 第一步:下载Ubuntu系统iso镜像文件 下载Ubuntu系统iso镜像文件,由于我是新手,下 ...

  6. Linux平台上DPDK入门指南

    1. 简介 本文档包含DPDK软件安装和配置的相关说明.旨在帮助用户快速启动和运行软件.文档主要描述了在Linux环境下编译和 运行DPDK应用程序,但是文档并不深入DPDK的具体实现细节. 1.1. ...

  7. C-RAN

    无线接入网(RAN)是移动运营商赖以生存的重要资产.传统的无线接入网具有以下特点: 1. 每一个基站连接若干个固定数量的扇区天线,并覆盖小片区域,每个基站只能处理本小区收发信号: 2. 系统的容量是干 ...

  8. C#限制float有两位小数

    string str = (float.Parse(recode)).ToString("f2");//recode是string类型

  9. 通过Google Custom Search API 进行站内搜索

    今天突然想把博客的搜索改为google的站内搜索,印象中google adsense中好像提高这个站内搜索的代码,但苦逼的是google adsense帐号一直审核不通过,所以只能通过google c ...

  10. C# 语言版本

    (摘自:维基百科)https://en.wikipedia.org/wiki/C_Sharp_(programming_language) Versions Version Language spec ...