9180


java.lang.Threadで、別スレッドでタイマーを起動して、  
メインスレッドが停止するか、タイマースレッドが規定時間を過ぎたタイミングでプロセスを終了したいのですが、  
仕様を見ると、”休止中のスレッドに対する割り込み”(interrupt)しか見当たらないので、常時走っているメインスレッドへの割り込みは、不可能ということになるんでしょうか？

イメージとしては、実行クラスで

[code]

    try {
        final Thread main = Thread.currentThread();
        Thread timer = new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000 * 60 * 60 * 24);
                catch (Exception e) {
                }
                main.interrupt();
            }
        }
        timer.setDaemon(true);
        timer.run();
    } catch (InterruptedException e) {
        System.exit();
    }
    
[/code]

みたいなことをしたいです。


CC BY-SA 3.0
2015-04-15T01:17:57.300
9169
2015-04-15T03:36:34.983
8396
question
java
【Java】Threadの割り込みについて


> 常時走っているメインスレッドへの割り込みは、不可能ということになるんでしょうか？

（即時の割り込みは）不可能です。あるスレッドにおける割り込みの確認は、そのスレッド自身の待機処理でのみ行われます。

ただし、メインスレッド側で明示的に[`Thread#interrupted()`](https://docs.oracle.com/javase/jp/8/api/java/lang/Thread.html#interrupted--)または[`Thread#isInterrupted()`](https://docs.oracle.com/javase/jp/8/api/java/lang/Thread.html#isInterrupted--)を呼び出して、任意タイミングで割り込み有無をチェックすることはできます。


CC BY-SA 3.0
2015-04-15T03:05:39.010
9180
2015-04-15T03:36:34.983
2015-04-15T03:36:34.983
49
49
9169
answer