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. [置顶]【实用 .NET Core开发系列】- 导航篇

    前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...

  2. #UnityTips# 2017.11.14

    hi,all.最近比较忙,所以更新也比较慢了. 今天就来和大家分享一个小Tip,它是关于UGUI的坑的. 使用过UGUI的朋友们都知道,Canvas的渲染方式有三种: Screen Space Ove ...

  3. [转载] Java学习之Hessian通信基础

    转载自http://blog.sina.com.cn/s/blog_7f73e06d0100xn9j.html 一.首先先说Hessian是什么?    Hessian:hessian是一个轻量级的r ...

  4. Struts2-整理笔记(三)结果处理跳转、获得servletAPI原生

    在struts2中有很多种跳转方式如下是在struts-default.xml截取的一段源码,常用的跳转有 转发:dispatcher.重定向:redirect.转发到Action:chain.重定向 ...

  5. SAXParserFactory

    Defines a factory API that enables applications to configure and obtain a SAX based parser to parse ...

  6. python 标准模块shlex

    shlex模块为基于Uninx shell语法的语言提供了一个简单的lexer(也就是tokenizer) 举例说明: 有一个文本文件quotes.txt This string has embedd ...

  7. 分享一篇vue项目规范

    最近 Vue 用的比较多,而且因为公司里有实习生,当几个人写一个项目的时候,会出现很多问题,最麻烦的就是规范不统一,之前我有一篇文章是说, vue 是比较有规范的一种框架了,但是也会出现很多问题,所以 ...

  8. Javascript中prototype属性

    prototype作为JS相对比较难理解的一个知识点,在这里发表下自己的理解. 本文将包含以下几部分内容: 1.js prototype的简单介绍, 2.js构造函数的介绍, 3.prototype的 ...

  9. 说说缓存,说说Redis

    无论是客户端还是服务端,缓存都是必不可少的一种提升用户体验的策略,大家在平时开发中,有意无意都会用到缓存,比如说 Android 开发的同学们,所有的图片框架,基本都有用到缓存技术,服务端那就完全不用 ...

  10. 《java.util.concurrent 包源码阅读》18 Exchanger

    Exchanger可以看做双向数据传输的SynchronousQueue,即没有生产者和消费者之分,任意两个线程都可以交换数据. 在JDK5中Exchanger被设计成一个容量为1的容器,存放一个等待 ...