偶爾我們必須在完全關閉整個JVM之前強制性地停止線程作爲盡力而爲的方式。通常引用Thread#stop
作爲一個絕對的,即使是無用的和不贊成使用的方式來無條件停止線程。其實並非如此,但是:所有的流氓線程必須做,以保持自身運行的是抓ThreadDeath
或超:如何無條件地停止線程
public static void main(String[] args) throws InterruptedException {
final Thread t = new Thread() { public void run() {
for (;;)
try { Thread.sleep(Long.MAX_VALUE); }
catch (Throwable t) {
System.out.println(t.getClass().getSimpleName() + ". Still going on...");
}
}};
t.start();
Thread.sleep(200);
t.interrupt();
Thread.sleep(200);
t.interrupt();
Thread.sleep(200);
t.stop();
Thread.sleep(200);
t.stop();
}
這將打印
InterruptedException. Still going on...
InterruptedException. Still going on...
ThreadDeath. Still going on...
ThreadDeath. Still going on...
還有什麼,我可以做真的,真的停止一個線程而不殺死整個JVM?
我知道它不回答這個問題[但這是一個很好的閱讀主題](http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation。 HTML),它解釋了爲什麼停止首先被棄用。此外,爲什麼你會有一個'胭脂線',可能會首先捕獲TheadDeath和中斷?線程不是爲了那個。他們不提供安全。另一個線程也可以終止JVM本身 - 或者產生其他有問題的線程。 –
這在某種程度上是一個學術問題;我只是想知道每種停止技術究竟做了什麼以及首先有哪些技術。隨着特定需求的出現,這種知識可以拯救你。 –
@BenjaminGruenbaum我建議提交一個簡單的答案「no」:沒有辦法真的,_really_(強行)停止線程而不殺死整個JVM,然後鏈接到那篇文章。 –