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程序开发.调试.优化经验,所以线程相关 ...
随机推荐
- [转载] Redis资料汇总专题
转载自http://www.cnblogs.com/tommyli/archive/2011/12/14/2287614.html 1.Redis是什么? 十五分钟介绍 Redis数据结构 Redis ...
- Logstash&Redis&Elasticsearch&Kibana
[搭建] 一个很好的提示,强调版本的一致性 http://www.cnblogs.com/yjf512/p/4194012.html http://michael.bouvy.net/blog/en/ ...
- Python之numpy模块array简短学习
1.简介 Python的lists是非常的灵活以及易于使用.但是在处理科学计算相关大数量的时候,有点显得捉襟见肘了. Numpy提供一个强大的N维数组对象(ndarray),包含一些列同类型的元素,这 ...
- [转]Oracle 索引质量分析
http://blog.csdn.net/leshami/article/details/23687137 索引质量的高低对数据库整体性能有着直接的影响.良好高质量的索引使得数据库性能得以数量级别的提 ...
- 四、VueJs 填坑日记之搭建Axios接口请求工具
上一章,我们认识了项目的目录结构,以及对项目的目录结构做了一些调整,已经能把项目重新跑起来了.今天我们来搭建api接口调用工具Axios.Vue本身是不支持ajax调用的,如果你需要这些功能就需要安装 ...
- .net SignalR winform 推送广播
最近在做一个项目,需要用到服务端主动推送给客户端,最开始用的是自己比较顺手的Remoting,可后来发现把服务端架到外网上,就猴子它哥了,后来又尝试WCF,虽然能推送,但是推了几次也猴子它哥了,后来找 ...
- shell脚本 expect 实现自动登陆
vi auto_ssh.exp #!/usr/bin/expect set ipaddress "123.227.159.159" set passwd "你的密码& ...
- 电商SEO
大家都知道网站有SEO,电商也有SEO,今天陈晨就带大家来讲讲电商SEO的思路以及电商最重要的选品规划! 1. 选品是核心 2. 挖掘卖点是你走向成功必经之路 3. 产品定价策略---人群画像 4. ...
- nodejs+mongoose+websocket搭建xxx聊天室
简介 本文是由nodejs+mongoose+websocket打造的一个即时聊天系统:本来打算开发一个类似于网页QQ类似功能的聊天系统,但是目前只是开发了一个模块功能 --- 类似群聊的,即一对多的 ...
- 把项目中的那些恶心的无处存储的大块数据都丢到FastDFS之快速搭建
在我们开发项目的时候,经常会遇到大块数据的问题(2M-100M),比如说保存报表中1w个人的ID号,他就像一个肿瘤一样,存储在服务器哪里都 觉得恶心,放在redis,mongodb中吧,一下子 ...