9

場合によっては、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全体を強制終了せずにスレッドを本当に停止するために他にできることはありますか?

4

2 に答える 2