/**
* 截获Thread.stop引起的ThreadDeath异常。<br>
* 我们理论上可以处理引起的stop异常信息。<br>
* 但是,异常可以发生在线程运行的任意一个点<br>
* 所有的同步方法和代码块都需要进行仔细的处理。<br>
* 而且线程在处理第一个ThreadDeath的时候可能再次发生ThradDeath<br>
* 所以清理工作必须一直做到成为为止,相关的处理代码将是异常的复杂。
*
* @author 老紫竹 JAVA世纪网(java2000.net)
*
*/
public class ThreadStopTestCatch {
private static Object lock = new Object();
private static int number = 0;
private static String name = "Name0";
public static void main(String[] args) {
ThreadStop t = new ThreadStop();
t.start();
ThreadRun t2 = new ThreadRun();
t2.start();
t.stop();
// t.stop();
}
static class ThreadRun extends Thread {
public void run() {
synchronized (lock) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("number=" + number);
System.out.println("name=" + name);
}
}
}
static class ThreadStop extends Thread {
public void run() {
synchronized (lock) {
try {
number++;
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
name = "Name" + number;
} catch (ThreadDeath td) {
number = 1;
// 假设线程stop的清理程序也需要一点时间才能完成。
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
name = "Name" + number;
td.printStackTrace();
}
}
}
}
}