調用stop()方法時會拋出java.lang.ThreadDeath異常,但在通常的情況下,此異常不需要顯式地捕捉。
/**
* MyThread線程測試
* @author wuyoushan
* @date 2017/3/21.
*/
public class MyThread extends Thread {
private int i=0;
@Override
public void run() {
try {
this.stop();
}catch(ThreadDeath e){
e.printStackTrace();
}
}
}
/**
* @author wuyoushan
* @date 2017/3/20.
*/
public class Run {
public static void main(String[] args){
MyThread myThread=new MyThread();
myThread.start();
}
}
運行結果為:
java.lang.ThreadDeath
at java.lang.Thread.stop(Thread.java:836)
at wys.test.MyThread.run(MyThread.java:14)
Process finished with exit code 0
方法stop()已經被作廢,因為如果強制讓線程停止則有可能使一些清理性的工作得不到完成。另外一個情況就是對鎖定的對象進行了“解鎖”,導致數據得不到同步的處理,出現數據不一致的問題。
摘選自 java多線程核心編程技術-1.7.6