1

次の場合を考えてみましょう。

main() {
    ClassA insA = new ClassA();
    insA.run();
}

ClassA.run() {
    for(;;) {
        RMI.call();
        blahblah();
    }
}

RMI.call()Semaphore.acquire()は、 (別のスレッドで)何かが発生するまでスレッドをブロックするRMI関数です。

問題は、どうすればすべてのスレッドを安全に強制終了できるかということです。

以下のよう にstop()関数を定義します。ClassA

stop() {
    Thread.currentThread.interrupt();
}

外部から呼び出すと(たとえばmain())、RMI呼び出しスレッドが中断されることはありません。

コードを正しく終了できるように、元のスレッドを中断するにはどうすればよいですか?
または他の方法で安全に出口を出ますか?

4

1 に答える 1

0

このライブラリを確認してください:http://java.net/projects/interruptiblermi。Thread#interrupt()は役に立ちません。

于 2012-05-28T13:29:15.467 に答える