Java JUC (java.util.concurrent) 6 - Exception

To stop a thread

  1. stop() // deprecated
    throws ThreadDeath exception and release lock
  2. interrupt() // isInterrupted()
public class MyThread extends Thread {
    @Override
    public void run() {
        try {
            for (int i=0; i<50000; i++){
                if (this.isInterrupted()) {
                    System.out.println(" 已经是停止状态了!");
                    throw new InterruptedException();   // or intead use return;
                }
                System.out.println(i);
            }
            System.out.println(" 不抛出异常,我会被执行的哦!");
        } catch (Exception e) {
//            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) throws InterruptedException {
        MyThread myThread =new MyThread();
        myThread.start();
        Thread.sleep(100);
        myThread.interrupt();
    }
 
}

suspend() and resume() // deprecated because occupy lock

suspend can block println()

public void println(String x) {
		synchronized (this) {
				print(x);
				newLine();
		}
}

uncaughtException

ThreadGroup group = new ThreadGroup(""){
      @Override
      public void uncaughtException(Thread t, Throwable e) {
             super.uncaughtException(t, e);
             // 一个线程出现异常,中断组内所有线程
             this.interrupt();
      }
};
public class MyThread{
 
    public static void main(String[] args) {
        ThreadGroup threadGroup = new ThreadGroup("ThreadGroup"){
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                System.out.println(" 线程组的异常处理 ");
                super.uncaughtException(t, e);
            }
        };
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                System.out.println(" 线程类的异常处理 ");
            }
        });
        Thread thread = new Thread(threadGroup,"Thread"){
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+" 执行 ");
                int i= 2/0;
            }
        };
//        thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
//            @Override
//            public void uncaughtException(Thread t, Throwable e) {
//                System.out.println(" 线程对象的异常处理 ");
//            }
//        });
        thread.start();
    }
 
}

//Thread 执行
//线程组的异常处理
//线程类的异常处理