java 线程 捕获异常
java 线程 捕获异常 来自:thinking in java 4 文件夹20.2.13
package org.rui.thread.concurrent; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 捕获异常
*
* 以下的任务总是会抛出一个异常。该异常会传播到其run方法的外部。
* 而且main展示了当你执行它时,所发生的事情
* @author lenovo
*
*/
public class ExceptionThread implements Runnable { @Override
public void run() {
throw new RuntimeException(); } public static void main(String[] args) {
/*ExecutorService exec=Executors.newCachedThreadPool();
exec.execute(new ExceptionThread());
*/
try {
ExecutorService exec=Executors.newCachedThreadPool();
exec.execute(new ExceptionThread());
} catch (Exception e) {
System.out.println("eeeeeeeeeeeeeeee 该语句将不执行!");
} } }
/**output: 以上输出结果一样:
Exception in thread "pool-1-thread-1" java.lang.RuntimeException
at org.rui.thread.concurrent.ExceptionThread.run(ExceptionThread.java:15)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
*/
package org.rui.thread.concurrent; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory; /**
* 捕获异常
*
* 为了解决问题,我们要改动executor产生线程的方式。thread.UncaughtExceptionHandler是javaSE5中的新接口。
* 它同意你在每一个Thread对象上都附着一个异常处理器......
*
* @author lenovo
*
*/
class ExceptionThread2 implements Runnable
{
@Override
public void run() {
Thread t=Thread.currentThread();
System.out.println("run by : "+t);
System.out.println(t.getUncaughtExceptionHandler());
throw new RuntimeException();
} }
//////////////////无知的Exception
class MyUncaughtExecptionHandler implements Thread.UncaughtExceptionHandler
{
@Override
public void uncaughtException(Thread t, Throwable e) { System.out.println("caught "+e); } }
////////////////
class handlerThreadFactory implements ThreadFactory
{ @Override
public Thread newThread(Runnable r) {
System.out.println("创建新的线程");
Thread t=new Thread(r);
t.setUncaughtExceptionHandler(new MyUncaughtExecptionHandler());
System.out.println("eh= "+t.getUncaughtExceptionHandler());
return t;
} } public class CaptureUncaughtExecption {
public static void main(String[] args) {
ExecutorService exec=Executors.newCachedThreadPool(new handlerThreadFactory() );
exec.execute(new ExceptionThread2()); } } /**
output:
创建新的线程
eh= org.rui.thread.concurrent.MyUncaughtExecptionHandler@192c8d9
run by : Thread[Thread-0,5,main]
org.rui.thread.concurrent.MyUncaughtExecptionHandler@192c8d9
创建新的线程
eh= org.rui.thread.concurrent.MyUncaughtExecptionHandler@16f144c
caught java.lang.RuntimeException
*/
package org.rui.thread.concurrent; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 这个处理器仅仅有在不存在线程专有的末捕获异常处理器的情况下才会被调用。 * 系统会检查线程专有版 本。假设没有发现。则检查线程组是否有其专有的uncaughtException()方法。
* 假设也没有。再调用defaultUncaughtExceptionHandler
* @author lenovo
*
*/
public class SettingDefaultHandler
{
public static void main(String[] args) {
Thread.setDefaultUncaughtExceptionHandler(
new MyUncaughtExecptionHandler()
); ExecutorService exec=Executors.newCachedThreadPool();
exec.execute(new ExceptionThread());
} }
/**
* output:
caught java.lang.RuntimeException */
java 线程 捕获异常的更多相关文章
- java线程捕获异常
java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked ex ...
- 【转载】 Java线程面试题 Top 50
Java线程面试题 Top 50 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的J ...
- Java线程的5个使用技巧
萝卜白菜各有所爱.像小编我就喜欢Java.学无止境,这也是我喜欢它的一个原因.日常工作中你所用到的工具,通常都有些你从来没有了解过的东西,比方说某个方法或者是一些有趣的用法.比如说线程.没错,就是线程 ...
- Java线程面试题 Top 50 (转载)
转载自:http://www.cnblogs.com/dolphin0520/p/3958019.html 原文链接:http://www.importnew.com/12773.html 本文由 ...
- 50 道 Java 线程面试题(转载自牛客网)
下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理 ...
- Java线程面试题 Top 50
转自:http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java ...
- 【多线程】Java线程面试题 Top 50(转载)
Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎 ...
- Java线程面试题 Top 50(转载)
原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末尾的 ...
- [ImportNew]Java线程面试题
Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关 ...
随机推荐
- 使用NPOI导出图片到EXCEL
1.首先引用NPOI 2.本例用到的引用 3.在Controller里面添加导出方法 public ActionResult ExportMsgData(string term) { //为list赋 ...
- HTML+CSS+js常见知识点
一.HTML.CSS常见知识点 1.垂直居中盒子 /* 方法一 */ html, body { width: 100%; height: 100%; padding: 0; margin: 0; } ...
- C# 程序集安装与卸载
下面我们来实现程序集的安装,代码如下: /// <summary>/// 程序集安装与卸载/// </summary>/// <param name="asse ...
- [转载] Thrift-client与spring集成
转载自http://shift-alt-ctrl.iteye.com/blog/1990030?utm_source=tuicool&utm_medium=referral Thrift-cl ...
- cmd+任务管理器解决端口被占用的问题
1.打开cmd命令行 2.输入命令netstat –ano,会显示所有被占用的端口号以及占用该端口的程序所对应的进程号. (local address下面是端口号,PID是占用端口的某程序的进程号) ...
- axios跨域
参考:http://www.ruanyifeng.com/blog/2016/04/cors.html 遇到前后分离情况 前端 a.com 后端 server.a.com 环境 vue全家桶前端 ph ...
- Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 ============================= 蕃薯耀 2017年11月27日 http: ...
- 加密代理和Retrofit解密Converter
最近在研究安卓的Retrofit框架,服务器的数据全部用加密算法加密了,发现无法使用"com.squareup.retrofit2:converter-gson:2.1.0"Jar ...
- Git详解及 github与gitlab使用
1.1 关于版本控制 1.1.1 本地版本控制 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别.这么做唯一的 好处就是简单,但是特别容易犯错.有 ...
- 四、Hadoop学习笔记————各种工具用法
hive基本hql语法 Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库 ...