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. jQuery二级下拉菜单

    在线演示 本地下载

  2. 在两台服务器之间建立信任关系解决scp,ssh等不用输入密码等问题

    A服务器(client)向B服务(server)SCP,SSH. A服务器:ssh-keygen -t rsa -C "kangzj" 一直回车. cd .ssh vim id_r ...

  3. Vmware ESXi 6.0 多Vlan部署,vSphere Client管理方法

    背景: 公司IT部门新购了两台服务器与一台存储,打算做虚拟化,并将存储分成两个部分,分别配给那两台服务器.在宿主机上要安装的虚拟机属于不同的网段,这就涉及了多VLAN,当然这并不是多么高深的技术,属于 ...

  4. Hadoop:eclipse配置hadoop-eclipse-plugin(版本hadoop2.7.3)

    配置hadoop-eclipse-plugin(版本hadoop2.7.3): 1:首先下载我们需要的  hadoop-eclipse-plugin-2.7.3.jar,winutils.exe 和 ...

  5. AI理论学习笔记(一):深度学习的前世今生

    AI理论学习笔记(一):深度学习的前世今生 大家还记得以深度学习技术为基础的电脑程序AlphaGo吗?这是人类历史中在某种意义的第一次机器打败人类的例子,其最大的魅力就是深度学习(Deep Learn ...

  6. fabric查看本地与远程主机信息

    #!/usr/bin/pythonfrom fabric.api import *env.user='root'env.hosts=['172.10.224.183','172.10.224.132' ...

  7. Effective C++ 条款02:尽量以const,enum,inline替换 #define

    换一种说法就是宁可以编译器替换预处理器 举例 #define ASPECT_RATIO 1.653 记号ASPECT_RATIO也许从未被编译器看见:也许在编译起开始处理源码前它就被预处理器移走了,于 ...

  8. LeetCode——Next Greater Element I

    LeetCode--Next Greater Element I Question You are given two arrays (without duplicates) nums1 and nu ...

  9. jq限制字符个数

    <script> $(document).ready(function () { //限制字符个数 $(".box-right .title a").each(func ...

  10. SubSets,SubSets2, 求数组所有子集

    问题描述: Given a set of distinct integers, nums, return all possible subsets. Note: The solution set mu ...