[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: Thread#interrupt()




こんにちは Shin さん、下村です。

> しかし、その手段しかないとなるとclose()などを呼び出すThread
> (Threadを終了させようとするThread)が、ServerSocketやInputStream
> のインスタンスを保持していなければならない、または
> ブロックするThreadオブジェクトにclose()を呼び出すような公開メソッド
> を定義しなければならないんですよね.

僕はブロッキングするスレッドを内部クラスとして定義することで
解決しています。内部クラスはキライだという方もいらっしゃる
でしょうが、コードの上では非常に明快ですよ。

内部クラスにするのがいやでも、おおもとのスレッドが
IO を監視するスレッドのコンストラクタに監視するべき IO の
インスタンスを渡すのはごく自然だと思います。

> そして決定的なのがIO絡みのオブジェクトに例外を送出させることで
> 終了とするのが、Thread#stop()と比べて理想なのかどうか
> なんですけど、JAVAの開発者はどう考えているんでしょうね?

まさか、スレッドだけ止めて IO を開きっぱなしにしとくわけじゃない
でしょう? (標準入出力は例外的に開きっぱなしですが)
IO のクローズ = スレッドの停止 というのはそう不自然な考え方だとは
思わないのですが。(もちろん、ほかに解決策がなければ、の話です。)

いずれにしても、Thread#interrupt() が IO のブロッキングにも有効なら
万事丸く収まるのにね...(と話をサブジェクトに戻す(笑))

         === == =  TACT/下村哲人  神奈川県横浜市  = == ===
          === == =       E-mail: tact@xxxxxxxxxx      = == ===