InterruptedException関連の話
Threadという実行体で言えばinterrupt()されたところで実行はされ続けるし、ThreadPoolで再利用することができる。が、「処理を中断」をそういうふうに理解されるとはね。
2011-12-05 10:49:23Thread.interrupt()を呼んでいいのは、そのスレッドが実行中のライブラリなりソフトウェアなりがThread.interrupt()が呼んでいいよ、その場合こうなるよ、ってちゃんとドキュメントなりなんなりに書いてある場合のみ
2011-12-05 11:22:52そうではない場合「意図しない動作」の定義ができないので呼んだらどうなるかは運次第だしどうなったところでバグとも呼べない、だからThread.interrupt()はAPIとしてはうんこだし、きちんとしたライブラリはきちんと停止できるようなAPI用意しましょうね
2011-12-05 11:24:07例えばSocket上でreadしてるようなやつ止めたいんだったらSocket.close()を呼ぶべきで、Thread.interrupt()を呼ぶべきじゃないし、interrupt呼んだ瞬間にそのスレッドが運良くリードループ抜けたらどうするのとか考えてコード書いてるやつ希少
2011-12-05 11:34:46自分のコードでwait前後だとかIO前後だとか外部からinterrupt()されていた可能性のある全ての場所を考慮してThread.interrupted()をいちいち呼ばなきゃバグだとか言われるのは不条理だしそんなクソAPIに付き合う必要はないと思う
2011-12-05 11:44:49あー、なるほど、interrupt()したからってスレッドが終了すべきかどうかとは関係なくて、スレッドが実行してる処理を中断するんだよねって話か。その結果としてスレッドが終了するかしないかはまた別の話だと。そりゃそうだな。
2011-12-05 11:45:06「安全にThreadを停止させるには、while文のなかでスレッドの事項状態を表すフラグをチェックしてください」とかJavaDocに書いてあるが、よく考えたらとんでもねー話だ
2011-12-05 11:46:45JavaってThreadを簡単に利用できるっていうのが一つの売りになってたような気がするんやけど、やっぱりThreadって難しいで…。Threadだけで本が一冊二冊書ける位だからCのポインタくらいには難しいと思っておいたほうがええと今日感じた。
2011-12-05 12:51:30手前のプログラムを見る限り、正直Threadをしっかりと使いこなしてる気がしない。ただ利用してるだけ。本を読み勉強したけれど段々深みにハマっていくな。いつかぱっと視界が開けりゃいいけど。
2011-12-05 12:54:41