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

[jfriends] Re: Thread#interrupt()




Shin@イデアです.

>shin> によって外部からThreadを安全に終了させる(stop()を使わずに)手段ができた
と
>shin> 思っているのですが、いまだにInputStream#read()やServerSocket#accept()
>shin> を外部からやめさせる方法が分かっていません.
>shin> (これは個人的な話ですが)
>
>ServerSocket#accept() は、他のスレッドで ServerSocket#close() を呼び、
>ブロッキングしているスレッドで SocketException を catch すればよい
>と思います。(実験済み)
>
>InputStream#read() が interrupt() を呼ばれても InterruptedIOException を
>投げて中断しないのはバグじゃないかなという気もします。
>JDK のリファレンスには See Also : interrupt とあるのに。
>フラグを立ててから InputStream#close() を呼んで IOException を
>catch するという手は使えないでしょうか。実験はしていませんが。

確かにストリームやServerSocketが例外を出すような
処理を行えば入力待ち状態から抜けれるし、
標準入力に関しては、それ以外の方法は思いつきません.
(あ、私も確かめてはいないのですが)

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

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

(実はsunかどこかにThread#stop()の代わりに・・といった文書が
あった気がするんですがどこか分からない)
-----------------------------------------------
shin@xxxxxxxxxx
-----------------------------------------------