java多线程:线程体往外抛出异常的处理机制实践
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多线程:线程体往外抛出异常的处理机制实践的更多相关文章
- Java多线程——线程的优先级和生命周期
Java多线程——线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...
- Java多线程——线程之间的协作
Java多线程——线程之间的协作 摘要:本文主要学习多线程之间是如何协作的,以及如何使用wait()方法与notify()/notifyAll()方法. 部分内容来自以下博客: https://www ...
- Java多线程——线程之间的同步
Java多线程——线程之间的同步 摘要:本文主要学习多线程之间是如何同步的,如何使用volatile关键字,如何使用synchronized修饰的同步代码块和同步方法解决线程安全问题. 部分内容来自以 ...
- java 多线程—— 线程让步
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- java 多线程—— 线程等待与唤醒
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- Java多线程--线程及相关的Java API
Java多线程--线程及相关的Java API 线程与进程 进程是线程的容器,程序是指令.数据的组织形式,进程是程序的实体. 一个进程中可以容纳若干个线程,线程是轻量级的进程,是程序执行的最小单位.我 ...
- Java多线程-线程的同步(同步方法)
线程的同步是保证多线程安全访问竞争资源的一种手段.线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源.什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些 ...
- Java多线程——线程的创建方式
Java多线程——线程的创建方式 摘要:本文主要学习了线程的创建方式,线程的常用属性和方法,以及线程的几个基本状态. 部分内容来自以下博客: https://www.cnblogs.com/dolph ...
- Java多线程——线程的死锁
Java多线程——线程的死锁 摘要:本文主要介绍了Java多线程中遇到的死锁问题. 部分内容来自以下博客: https://www.cnblogs.com/wy697495/p/9757982.htm ...
随机推荐
- Apache 日志管理
日志参数 %% 百分号(Apache2.0.44或更高的版本) %a 远端IP地址 %A 本机IP地址 %B 除HTTP头以外传送的字节数 %b 以CLF格式显示的除HTTP头以外传送的字节数,也就是 ...
- Linux下针对路由功能配置iptables的方法详解
作为公司上网的路由器需要实现的功能有nat地址转换.dhcp.dns缓存.流量控制.应用程序控制,nat地址转换通过iptables可以直 接实现,dhcp服务需要安装dhcpd,dns缓存功能需要使 ...
- 让Tomcat供外网访问
使用Tomcat+花生壳部署一个Javaweb网站,步骤分为三步. 第一,花生壳配置. 下载花生壳,并默认安装.申请动态域名,激活护照,登录.(都是常规操作,不必多说) 第二,Tomcat设置. 找到 ...
- 【转载】在block中使用weakSelf/strongSelf
http://blog.lessfun.com/blog/2014/11/22/when-should-use-weakself-and-strongself-in-objc-block/
- [BZOJ1823]满汉全席
Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而 ...
- Java 常用正则表达式 - 转载
只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$".只能输入至少n位的数字:"^\d{n,}$".只能输入m~n位的 ...
- XML 存储文档
package com.kpsh.myself; import java.io.File;import java.io.FileWriter; import org.dom4j.Document;im ...
- Oracle cmd乱码
查看下环境变量的设置,查看是否有变量NLS_LANG,没有则新建该变量.新建变量,设置变量名:NLS_LANG,变量值根据以上字符集确定,一般都是中文简体SIMPLIFIED CHINESE_CHIN ...
- 如何进行数据库,比如ORACLE,SQL SERVER的逆向工程,将数据库导入到PowerDesigner中
Oracle的反向工程就是指将Oracle中的数据库,当然也可以是SQL Server中的数据库导入到PD中,这个需要建立一个数据库的链接,然后进行逆向工程的操作. 第一步:建立数据库的链接: Pow ...
- python模块及模块安装
其实python的模块及模块安装和其他编程语言,如:nodeJs.reactJs的相同,只不过他们使用包管理工具不相同而已,python用pip,而node用npm python 模块 python语 ...