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 线程 捕获异常的更多相关文章

  1. java线程捕获异常

    java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked ex ...

  2. 【转载】 Java线程面试题 Top 50

    Java线程面试题 Top 50 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的J ...

  3. Java线程的5个使用技巧

    萝卜白菜各有所爱.像小编我就喜欢Java.学无止境,这也是我喜欢它的一个原因.日常工作中你所用到的工具,通常都有些你从来没有了解过的东西,比方说某个方法或者是一些有趣的用法.比如说线程.没错,就是线程 ...

  4. Java线程面试题 Top 50 (转载)

    转载自:http://www.cnblogs.com/dolphin0520/p/3958019.html 原文链接:http://www.importnew.com/12773.html   本文由 ...

  5. 50 道 Java 线程面试题(转载自牛客网)

    下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理 ...

  6. Java线程面试题 Top 50

    转自:http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java ...

  7. 【多线程】Java线程面试题 Top 50(转载)

    Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html   本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎 ...

  8. Java线程面试题 Top 50(转载)

    原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末尾的 ...

  9. [ImportNew]Java线程面试题

    Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关 ...

随机推荐

  1. Container With Most Water 容器最大水容量

    描述 Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai ...

  2. c#基础知识索引器

    代码 ]);    }} 在这里我们看到,无非是实现了一个泛型算法 等同于 Ontology List<string> lit=new List<string>(); lis. ...

  3. SpringMVC---@RequestMapping

    配置文件 承接第一,二章 index.jsp <%@ page language="java" contentType="text/html; charset=UT ...

  4. Weblogic之简介

    一.简介(来自百度百科)   WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发.集成.部署和 ...

  5. MyBatis《2》

    MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/   1.properties 属性 1.在MyBatis配置文件中引用属性文件     MyBatis允许在 ...

  6. 如何用while循环 输出一个九九乘法表

    方法一 i = 1 while i < 10: k = 1 while k <= i: print('%d*%d=%2d '% (i,k,i*k),end='') #end='' 表示不换 ...

  7. Less 编译工具

    Less 编译工具 虽然你可以选择在浏览器端使用Less,直接在页面中嵌入一个 Less.js 文件,你也可以选择在服务器端使用Less,使用命令行将Less文件编译成最终的CSS文件. 然而,这两种 ...

  8. 使用sklearn进行数据挖掘-房价预测(5)—训练模型

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  9. 《Linux命令行与shell脚本编程大全》第十八章 图形化桌面环境中的脚本编程

    18.1 创建文本菜单 直接上例子吧:   1 #!/bin/bash   2 function menu   3 {   4         clear   5         echo   6   ...

  10. 电子笔记本的思考(1)(ver0.3)

    章节:电子笔记本的思考(1)   陶哲轩在<解题·成长·快乐——陶哲轩教你学数学>中着重强调,用纸笔来“缓存”思维对于数学解题的重要性: 用选定的符号表达你所知道的信息,并画一个示意图.把 ...