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= [email protected]
run by : Thread[Thread-0,5,main]
[email protected]
创建新的线程
eh= [email protected]
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 线程 捕获异常

时间: 2024-10-05 12:33:44

java 线程 捕获异常的相关文章

java 线程详解

5月7号  周末看了一下线程方面的内容 ,边看视频边看书还附带着参考了很多人的博客,一天的收获,写下来整理一下:感觉收获还是挺多的:过段时间可能看完java  这几大块要去看一下关于spring boot  的内容顺便  也整理一下:附上我参考的 几本书: 关于java  线程,首先要了解一下线程和进程之间的关系.区别以及他们之间的概念: 首先是线程: 什么是线程? 线程是在程序执行过程中能够执行部分代码的一个执行单元,也看看做是一个轻量级的进程:线程是程序内的程序控制流只能使用程序内分配给程序

java线程详细介绍

目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1

Java线程经典面试题

53道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒.Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点. 2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并

Java线程面试题 Top 50

原文链接: javarevisited 翻译: ImportNew.com- 李 广译文链接: http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会被提到. 在典型的Java面试中, 面试官会从线程

【转】Java线程面试题Top50

目录(?)[-] 50道Java线程面试题 1 什么是线程 2 线程和进程有什么区别 3 如何在Java中实现线程 4 用Runnable还是Thread 6 Thread 类中的start 和 run 方法有什么区别 7 Java中Runnable和Callable有什么不同 8 Java中CyclicBarrier 和 CountDownLatch有什么不同 9 Java内存模型是什么 10 Java中的volatile 变量是什么 11 什么是线程安全Vector是一个线程安全类吗 详见这

疯狂Java学习笔记(59)-----------50道Java线程面试题

50道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒.Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点.欲了解更多详细信息请点击这里. 2) 线程和进程有什么区别? 线程是进程的子集,一个

Java线程面试题 Top 50(转)

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会被提到. 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像在J

【转】Java线程面试题 Top 50

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会被提到. 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像在J

Java 线程面试题 Top 50

--> html { line-height: 1.6 } body { font-family: -apple-system-font, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; background-color: #f3f3f3; line-height: inherit } body.ric