Java JUC (java.util.concurrent) 6 - Exception
To stop a thread
- stop() // deprecated
throws ThreadDeath exception and release lock - 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 执行
//线程组的异常处理
//线程类的异常处理