专栏首页爱撒谎的男孩并发编程之线程管理

并发编程之线程管理

并发编程之线程管理

线程的未捕获异常与监控

  • 如果线程的run方法抛出异常未被铺货(Uncaught Exception),那么随着run方法的退出,相应的线程也会提前终止。对于线程的这种异常终止,我们如何得知并做出可能的补救动作,例如重新创建并启动一个替代线程。
  • Jdk中使用UncaughtExceptionHandler接口实现了对线程的异常信息的监控和处理
    • 其中有一个uncaughtException(Thread a, Throwable e)方法,在这里我们可以将线程抛出的异常信息记录到日志中,或者开启一个替代线程继续提供服务

实例

12345678910111213141516171819202122232425262728293031323334353637383940

public class ThreadTest { public static void main(String[] args) { ErrHandler handle = null; ThreadA a = null; a = new ThreadA(); //创建线程对象 handle = new ErrHandler(); //创建UncaughtExceptionHandler a.setUncaughtExceptionHandler((UncaughtExceptionHandler) handle); a.start(); //启动 } } /** * 自定义的一个UncaughtExceptionHandler */class ErrHandler implements UncaughtExceptionHandler { /** * 这里可以做任何针对异常的处理,比如记录日志等等 * @param a : 抛出异常的线程对象 * @param e : 抛出的异常信息,可以获取异常信息 */ public void uncaughtException(Thread a, Throwable e) { //做一些日志管理 System.out.println("This is:" + a.getName() + ",Message:" + e.getMessage()); //开启一个另外的线程提供服务 System.out.println("现在执行另外一个替代线程提供服务......"); }} /** * 拥有UncaughtExceptionHandler的线程 */class ThreadA extends Thread { public void run() { double i = 12 / 0;// 抛出异常的地方 }}

线程工厂

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Thread初探

    爱撒谎的男孩
  • Lock

    从上面的synchronized释放锁可以看出,只有synchronized代码块执行完毕或者异常才会释放,如果代码块中的程序因为IO原因阻塞了,那么线程...

    爱撒谎的男孩
  • 并发编程之死锁

    3、既然死锁的产生是两个线程无限等待对方持有的锁,那么只要等待时间有个上限不就好了。当然synchronized不具备这个功能,但是我们可以使用Lock类中的t...

    爱撒谎的男孩
  • windows 常用thread方法

    1.HANDLE CreateThread( _In_opt_LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_S...

    战神伽罗
  • JAVA经典面试题讨论---类加载,多线程

    群里的小伙伴一个个都特别优秀,一大早便发来了小问题让大家讨论,简单讨论之后,要知其然,知其所以然,趁机巩固下近期知识

    疯狂的KK
  • 多线程编程必备技术—— volatile,synchronized,lock

    volatile: volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。确保本条指令不会...

    Java深度编程
  • Java并发面试题

    1、使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。2、使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume...

    一个优秀的废人
  • 线程的生命周期

    线程的六种状态: NEW、RUNNABLE、BIOCKED、WAITING、TIME_WAITING、TERMINATED。

    用户7386338
  • 「JAVA」线程生命周期分阶段详解,哲学家们深感死锁难解

    每个事物都有其生命周期,也就是事物从出生开始到最终消亡这中间的整个过程;在其整个生命周期的历程中,会有不同阶段,每个阶段对应着一种状态,比如:人的一生会经历从婴...

    老夫编程说
  • 没想到,这么简单的线程池用法,深藏这么多坑!

    生产有个对账系统,每天需要从渠道端下载对账文件,然后开始日终对账。这个系统已经运行了很久,前两天突然收到短信预警,没有获取渠道端对账文件。

    andyxh

扫码关注云+社区

领取腾讯云代金券