博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 线程 捕获异常
阅读量:5161 次
发布时间:2019-06-13

本文共 3229 字,大约阅读时间需要 10 分钟。

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();	}	}//无知的Exceptionclass 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@192c8d9run by : Thread[Thread-0,5,main]org.rui.thread.concurrent.MyUncaughtExecptionHandler@192c8d9创建新的线程eh= org.rui.thread.concurrent.MyUncaughtExecptionHandler@16f144ccaught 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 */

转载于:https://www.cnblogs.com/zsychanpin/p/7063522.html

你可能感兴趣的文章
关于Mybatis 的 Mapped Statements collection does not contain value for 异常 解决方案
查看>>
第五十五天 how can I 坚持
查看>>
【Oracle】oracle11g安装过程提示swap size 检查失败问题
查看>>
Ogre参考手册(二)3.1.1-3.1.2 材质、技术、通道
查看>>
eclipse 全局替换
查看>>
GiFResizer 图片压缩
查看>>
CKFinder 弹出窗口操作并设置回调函数
查看>>
查询当天、本周、本月记录
查看>>
ABAP学习之旅——多种方式建立模块化功能
查看>>
Android 音频的播放之二MediaPlayer
查看>>
leetCode(38):Lowest Common Ancestor of a Binary Search Tree
查看>>
PixelUtils:像素转换工具
查看>>
Python基础学习07--字典
查看>>
hyxzc_背包九讲课件
查看>>
【转载】淡出微信
查看>>
Selenium自动化-入门1
查看>>
MyBatis动态SQL————MyBatis动态SQL标签的用法
查看>>
执行shell脚本的三种方式
查看>>
c# dotNetBar symbol属性代码动态设置方法
查看>>
Git 迁库 标签
查看>>