Java多线程学习(三)
一、线程的异常(续)
在上一篇博文中我们提到了Thread.UncaughtExceptionHandler接口,我们在日常的编写中可以通过实现这一接口来给每一个Thread对象都附着一个异常处理器,方便异常的监视。
下面的这个例子便是如何创建异常处理器并将其附着到Thread对象上的。(该例子思路来自于Java编程思想(第四版))。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
//定义任务
class ExceptionTask implements Runnable {
@Override
public void run() {
Thread thread = Thread.currentThread();
System.out.println("号外号外!自定义的ExceptionTask任务正在运行");
System.out.println("当前运行线程中绑定的异常处理器是:" + thread.getUncaughtExceptionHandler());
throw new RuntimeException();
}
}
//定义自定义的异常处理器
class NewUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
public void uncaughtException(Thread thread, Throwable e) {
System.out.println("捕捉到了一个RuntimeException异常哟!"); }
}
//定义自定义的线程工厂
class MyThreadFactory implements ThreadFactory {
@Override
public Thread newThread(Runnable task) {
System.out.println("现在我们自己的MyThreadFactory要创建一个新的线程啦!");
Thread thread = new Thread(task);
System.out.println("名字为" + thread + "的线程被创建好啦!");
thread.setUncaughtExceptionHandler(new NewUncaughtExceptionHandler());
return thread;
}
}
public class ExceptionTest {
public static void main(String args[]) {
ExecutorService exec = Executors.newCachedThreadPool(new MyThreadFactory());
exec.execute(new ExceptionTask());
}
}
/*Sample Output:
现在我们自己的MyThreadFactory要创建一个新的线程啦!
名字为Thread[Thread-0,5,main]的线程被创建好啦!
号外号外!自定义的ExceptionTask任务正在运行
当前运行线程中绑定的异常处理器是:thread.NewUncaughtExceptionHandler@64acfc45
现在我们自己的MyThreadFactory要创建一个新的线程啦!
名字为Thread[Thread-1,5,main]的线程被创建好啦!
捕捉到了一个RuntimeException异常哟! */
下面对这一例子进行解释。
(1) 类的定义与目的
ExceptionTask类:该类用于定义任务,由于线程的任务便是驱动任务,所以任务是多线程编程的一个核心。
MyThreadFactory类:该类顾名思义,是创建线程的工厂。Java中给我们提供了ThreadFactory接口用于创造线程,故我们在自己的程序中设计驱动任务的线程时,可以实现这一接口,扩展定义属于自己的线程工厂。
NewUncaughtExceptionTask类:该类实现了我们前文中出现了多次的Thread.UncaughtExceptionHandler接口,我们可以通过这种形式来设置属于自己的异常处理器,从而方便我们在程序测试或者Debug的时候更容易的找到问题所在。
ExceptionTest类,就是我们这个样例的主类啦。在主方法中,我们按照前两篇文介绍过的方法创建线程池、线程,然后将定义好的任务放到线程池里。这一个案例就完成了。
(2) 样例的设计思想
此样例的思想来自于Java编程思想。设计思想便是创建线程工厂、任务以及我们心学习的异常处理器。然后根据并发编程的基本步骤(即定义任务、定义线程、将异常处理器绑定到线程以及驱动任务)来驱动我们定义的任务。
Java多线程学习(三)的更多相关文章
- JAVA多线程学习- 三:volatile关键字
Java的volatile关键字在JDK源码中经常出现,但是对它的认识只是停留在共享变量上,今天来谈谈volatile关键字. volatile,从字面上说是易变的.不稳定的,事实上,也确实如此,这个 ...
- Java多线程学习(三)---线程的生命周期
线程生命周期 摘要: 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(Running).阻塞 ...
- java多线程学习三
本章主要学习线程的静态方法 1.先忙先看一段代码: public class MyThread3 implements Runnable { static { System.out.println(& ...
- Java多线程学习(三)volatile关键字
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79680693 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
- Java多线程学习笔记
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...
- Java多线程学习(转载)
Java多线程学习(转载) 时间:2015-03-14 13:53:14 阅读:137413 评论:4 收藏:3 [点我收藏+] 转载 :http://blog ...
- java多线程学习笔记——详细
一.线程类 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- 【转】Java多线程学习
来源:http://www.cnblogs.com/samzeng/p/3546084.html Java多线程学习总结--线程概述及创建线程的方式(1) 在Java开发中,多线程是很常用的,用得好的 ...
- JAVA多线程学习笔记(1)
JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...
- “全栈2019”Java多线程第三十七章:如何让等待的线程无法被中断
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
随机推荐
- ZeroMQ接口函数之 :zmq_recvmsg – 从一个socket上接收一个消息帧
ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-recvmsg zmq_recvmsg(3) ØMQ Manual - ØMQ/4.1.0 Nam ...
- 转OSGchina中,array老大的名词解释
转OSGchina中,array老大的名词解释 转自:http://ydwcowboy.blog.163.com/blog/static/25849015200983518395/ osg:: Cle ...
- HDU1541 树状数组
Stars Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- *HDU3038 并查集
How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- NOIP2014初赛分数线及金华上线名单
NOIP2014初赛分数线及金华上线名单 分数线:提高组81.5,普及组93 这分数线还能再高些吗?悲催的浙江. 金华上线普及组名单: 地市 姓名 学校 年级 参赛语种 成绩 金华 成浩鹏 稠州丹溪校 ...
- 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-1 前言
视频简介: 该视频介绍收到iCore3应用开发平台后如何获取出厂代码,以 及如何下载出厂代码到应用开发平台中. 源视频包下载地址: http://pan.baidu.com/s/1nuUZW17 ...
- 你听说过哪些坑人 or 赚钱的歪点子?真是骗局太多,傻子都不够用啊!
又到了骗术揭秘时间了.各位看客您扶稳做好了,来给你深扒一些行业内幕了. 或者说一些投机的思路. 先提前写一些字,相信你们一会评论时候会用的上.直接复制,比较省力. “这年头傻逼太多,骗子明显不够用啊. ...
- Python 中的枚举类型~转
Python 中的枚举类型 摘要: 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期.月份.状态等. 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表 ...
- 简单的Markdown功能实现——marked模块的使用
marked是一个markdown 解析.编译器,通过引入marked模块,可以实现一个简单的markdown编辑器.使用方式如下: Install 新建一个项目文件夹,在项目中下载marked模块 ...
- Oracle中PL/SQL的执行部分和各种流程控制
Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...