zoukankan      html  css  js  c++  java
  • java多线程异常捕获

    java多线程中出现了异常,如何捕获。利用UncaughtExceptionHandler这个接口就可以了。

    代码如下:

    package com.ming.thread.six.threadcreateException;
    
    public class MyThread extends Thread{
    
        public void run(){
            String uname=null;
            System.out.println(uname.hashCode());
        }
    }
    package com.ming.thread.six.threadcreateException;
    
    import java.lang.Thread.UncaughtExceptionHandler;
    
    public class Run {
        public static void main(String[] args) {
            MyThread t=new MyThread();
            t.setName("mythread");
            t.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {//这个就是异常处理的实现,一旦出现异常就执行里面的方法哦
                @Override
                public void uncaughtException(Thread t, Throwable e) {
                    System.out.println("c出现了线程异常哦");
                    
                }
            });
            t.start();
            
        }
    }

    下面这个例子是在一个线程组中实现异常捕捉:

    package com.ming.thread.six.threadgroupException;
    
    public class MyThreadGroup extends ThreadGroup {
    
        public MyThreadGroup(String name){
            super(name);
        }
    
        @Override
        public void uncaughtException(Thread t, Throwable e) {
            super.uncaughtException(t, e);
            this.interrupt();//打断
        }
        
    }
    package com.ming.thread.six.threadgroupException;
    
    public class MyThread extends Thread{
    
        private String num;
        
        public MyThread(ThreadGroup group,String name,String num){
            super(group,name);
            this.num=num;
        }
        
        public void run(){
            int numInt=Integer.parseInt(num);
            while(this.isInterrupted()==false){
                System.out.println("死循环中:"+Thread.currentThread().getName());
            }
        }
    }
    package com.ming.thread.six.threadgroupException;
    
    public class Test {
    
        public static void main(String[] args) {
            MyThreadGroup group=new MyThreadGroup("我的线程组哦");
            MyThread [] myThreads=new MyThread[10];
            for(int i=0;i<myThreads.length;i++){
                myThreads[i]=new MyThread(group,"线程"+(i+1),"1");//正常线程
                myThreads[i].start();
            }
            MyThread newThread=new MyThread(group,"报错线程","sa");
            newThread.start();
        }
    }

    so,I forget it。。。

  • 相关阅读:
    AFO NOI2018退役——菜鸡一直是菜鸡
    NOI前总结
    洛谷3732:[HAOI2017]供给侧改革——题解
    BZOJ4037:[HAOI2015]数字串拆分——题解
    洛谷4717:【模板】 快速沃尔什变换——题解
    BZOJ3192:[JLOI2013]删除物品——题解
    BZOJ2288:[POJ Challenge]生日礼物——题解
    BZOJ1150:[APIO/CTSC2007]数据备份——题解
    BZOJ3155:Preprefix sum——题解
    Codility---FrogRiverOne
  • 原文地址:https://www.cnblogs.com/huzi007/p/7079412.html
Copyright © 2011-2022 走看看