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. Apache 工作模式配置优化

    Apahce 工作模式配置 1.查看当前MPM工作模式 /usr/local/apache2/bin/apachectl -V Server version: Apache/2.4.27 (Unix) ...

  2. VRChat简易教程2-创建一个最基本的世界(world)

    一.准备工作 1 先确保你安装了unity并导入了sdk 教程:https://www.cnblogs.com/cation/p/10311702.html 2 按之前的教程新建一个project并导 ...

  3. 20145201《Java程序设计》第十周学习总结

    教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴. 在发送和接收 ...

  4. C\C++与Java中的static关键字

    C\C++里面的static: 面向过程的static: 在c和c++面向过程的设计里,在全局变量前加上static关键字则可将该变量定义为一个静态全局变量,比如: static int a; 那么c ...

  5. React Native之Fetch简单封装、获取网络状态

    1.Fetch的使用 fetch的使用非常简单,只需传入请求的url fetch('https://facebook.github.io/react-native/movies.json'); 当然是 ...

  6. [C++] 2017联发科技杯编程挑战赛 复赛题 “杰克船长的烦恼”

    题目如下. 规则 杰克船长这次运气不错,抢到了一大堆金币.但他马上又开始发愁了, 因为如何给大家分金币,一直都是件不容易的事,每次杰克船长都要头疼好几天. 关于分金币,海盗的行规是这样的: 每次行动, ...

  7. Ctrl+Z 暂停程序及重启程序【转】

    本文转自:https://blog.csdn.net/duyiwuer2009/article/details/43191799 Ctrl+Z - 暂停进程并放入后台 jobs - 显示当前暂停的进程 ...

  8. Registering Components-->Autofac registration(include constructor injection)

    https://autofaccn.readthedocs.io/en/latest/register/registration.html Registration Concepts  (有4种方式来 ...

  9. C++中虚函数和纯虚函数的区别与总结

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...

  10. 初入Spring-boot(二)

    一.入口类 Spring boot通常有一个名为*Application的入口类,入口类里有一个main方法,这个main方法其实就是一个标准的java应用的入口方法.在main方法中使用Spring ...