次の場合を考えてみましょう。
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呼び出しスレッドが中断されることはありません。
コードを正しく終了できるように、元のスレッドを中断するにはどうすればよいですか?
または他の方法で安全に出口を出ますか?