java主线程捕获子线程中的异常
本文主要参考:《think in java》
好,下面上货。
-
package com.xueyou.demo.theadexceptiondemo;
-
-
public class ThreadExceptionRunner implements Runnable{
-
@Override
-
public void run() {
-
throw new RuntimeException("error !!!!");
-
}
-
}
-
package com.xueyou.demo.theadexceptiondemo;
-
-
import com.sun.glass.ui.TouchInputSupport;
-
-
import java.util.concurrent.ExecutorService;
-
import java.util.concurrent.Executors;
-
import java.util.concurrent.ThreadFactory;
-
-
public class ThreadExceptionDemo {
-
public static void main(String[] args) {
-
try {
-
Thread thread = new Thread(new ThreadExceptionRunner());
-
thread.start();
-
} catch (Exception e) {
-
System.out.println("========");
-
e.printStackTrace();
-
} finally {
-
}
-
System.out.println(123);
-
}
-
}
-
package com.xueyou.demo.theadexceptiondemo;
-
-
import com.sun.glass.ui.TouchInputSupport;
-
-
import java.util.concurrent.ExecutorService;
-
import java.util.concurrent.Executors;
-
import java.util.concurrent.ThreadFactory;
-
-
public class ThreadExceptionDemo {
-
public static void main(String[] args) {
-
try {
-
Thread thread = new Thread(new ThreadExceptionRunner());
-
thread.start();
-
} catch (Exception e) {
-
System.out.println("========");
-
e.printStackTrace();
-
} finally {
-
}
-
System.out.println(123);
-
ExecutorService exec = Executors.newCachedThreadPool(new HandleThreadFactory());
-
exec.execute(new ThreadExceptionRunner());
-
exec.shutdown();
-
}
-
}
-
-
class MyUncaughtExceptionHandle implements Thread.UncaughtExceptionHandler {
-
@Override
-
public void uncaughtException(Thread t, Throwable e) {
-
System.out.println("caught " + e);
-
}
-
}
-
-
class HandleThreadFactory implements ThreadFactory {
-
@Override
-
public Thread newThread(Runnable r) {
-
System.out.println("create thread t");
-
Thread t = new Thread(r);
-
System.out.println("set uncaughtException for t");
-
t.setUncaughtExceptionHandler(new MyUncaughtExceptionHandle());
-
return t;
-
}
-
-
}
-
package com.xueyou.demo.theadexceptiondemo;
-
-
import com.sun.glass.ui.TouchInputSupport;
-
-
import java.util.concurrent.ExecutorService;
-
import java.util.concurrent.Executors;
-
import java.util.concurrent.ThreadFactory;
-
-
/**
-
* Created by wuxueyou on 2018/6/24.
-
*/
-
public class ThreadExceptionDemo {
-
public static void main(String[] args) {
-
try {
-
Thread thread = new Thread(new ThreadExceptionRunner());
-
thread.start();
-
} catch (Exception e) {
-
System.out.println("========");
-
e.printStackTrace();
-
} finally {
-
}
-
System.out.println(123);
-
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandle());
-
// ExecutorService exec = Executors.newCachedThreadPool(new HandleThreadFactory());
-
ExecutorService exec = Executors.newCachedThreadPool();
-
exec.execute(new ThreadExceptionRunner());
-
exec.shutdown();
-
-
}
-
}
-
java主线程捕获子线程中的异常的更多相关文章
- Java主线程等待子线程、线程池
public class TestThread extends Thread { public void run() { System.out.println(this.getName() + &qu ...
- python主线程捕获子线程异常
python内置threading.Thread类创建的子线程抛出的异常无法在主线程捕获,可以对该类进行优化,为子线程添加exit code属性,主线程通过获取子线程的返回状态,来判断子线程中是否发生 ...
- Java主线程在子线程执行完毕后再执行
一.join() Thread中的join()方法就是同步,它使得线程之间由并行执行变为串行执行. public class MyJoinTest { public static void main( ...
- 线程:Java主线程等待子线程结束
使用Thread.join()方法: public class App { public static void main(String[] args) { testMain(); } public ...
- 验证:java 主线程在子线程结束后才会结束
package com.idealisan.test; /** * Hello world! * */ public class App { public static void main( Stri ...
- Java多线程之以7种方式让主线程等待子线程结束
记一次主线程等待子线程结束的多种方法的学习 在学习多线程时,最开始遇到的问题其实是"计算子线程运行时间",写到最后发现本文和标题更为符合,但是仍然基于问题:"在主线程中获 ...
- JAVA进阶----主线程等待子线程各种方案比较(转)
创建线程以及管理线程池基本理解 参考原文链接:http://www.oschina.net/question/12_11255?sort=time 一.创建一个简单的java线程 在 Java 语言中 ...
- Java并发编程原理与实战六:主线程等待子线程解决方案
本文将研究的是主线程等待所有子线程执行完成之后再继续往下执行的解决方案 public class TestThread extends Thread { public void run() { Sys ...
- java多线程实现主线程等待子线程执行完问题
本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明: 1.使用Thread的join()方法,join()方法会阻塞主线程继续向下执行. 2.使用Java.util.concurrent中的C ...
随机推荐
- Kali信息收集工具-dimtry
帮助文档 -s和-e参数需要用到google搜索 1.获取whois主机ip信息 2.扫描端口,根据banner信息判断服务
- pxe+kickstart无人值守安装
常用软件安装及使用目录 第1章 以前是怎么安装系统的 l 光盘(ISO文件,光盘的镜像文件)===>每一台物理机都得给一个光驱,如果用外置光驱的话,是不是每台机器都需要插一下 l U盘:ISO镜 ...
- php 连接redis查询数据
class Layoutdemo{ function index(){ $db = new Db(); $id=390; $layout_json = array(); if($info = $db- ...
- 拷贝构造函数 & 拷贝赋值运算符
一.拷贝构造函数 1. 形式 class A { public: // ... A(const A &); // 拷贝构造函数 }; 2. 合成拷贝构造函数 编译器总会为我们合成一个拷贝构造函 ...
- LintCode-159.寻找旋转排序数组中的最小值
寻找旋转排序数组中的最小值 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 你可以假设数组中不存在重复的 ...
- 软工网络15团队作业4——Alpha阶段敏捷冲刺-4
一.当天站立式会议照片: 二.项目进展 昨天已完成的工作: 完成程序副界面的设计与信息的输入统计 明天计划完成的工作: 日期等细致信息的处理 工作中遇到的困难: 对微信小程序开发的代码构成有了一些了解 ...
- Jenkins系列-Jenkins构建触发器
触发器说明 build whenever a snapshot dependency is built,当job依赖的快照版本被build时,执行本job. 触发远程构建 (例如,使用脚本):这里使用 ...
- django设置首页
1.在views中添加一个def 为homepage basepath=os.getcwd()+'\\dockerApp\\app\\templates\\';def homepage(request ...
- [Redis]在.NET平台下的具体应用
一.安装第三方驱动 PM> Install-Package ServiceStack.Redis 二.使用C#语言调用类库访问Redis
- c++的一些编程技巧和细节
1.函数形参,如: CreateProcess( NULL, cmdbuf, NULL, ...