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

[jfriends] Re: Thread#interrupt()




Shin@イデアです.

> Shin さん、こんにちは。
>
> >いまだにInputStream#read()やServerSocket#accept()
> >を外部からやめさせる方法が分かっていません.
> ブロッキングするメソッドを呼び出すスレッドと、終了イベントを受け取る
> スレッドを別にしてあげれは(試してませんが)良いと思います。
> ---
> 98/6/29(Mon) 02:22pm  QWR03550 ひがやすお@電通国際情報サービス

こんにちは.
終了イベントが何を指すか分かりませんでした.すみません.
実はここにあげた疑問は大分前にポストしたことがあったので、
上記の文面はめちゃ省略した書き方になってしまって
疑問点を正確に伝えるに至らないものだったと思ってます.
すみませんでした.

ここでの疑問は「ブロッキングするメソッドを呼び出すThreadが、
それを呼び出して入力待ち状態の時に、別のThreadからその
入力待ち状態を(安全に)抜けさせる方法」ということになります.

例えばあるThreadがServerSocket#accept()を呼び出して
ブロックしているときに、サーバプログラム自体を終了させたくて
別ThreadからブロックしているThreadを終わらせようとしても
Thread#stop()以外でスマートに終わらせる方法が思い浮かびません.

Thread#stop()はご存じの通りJDK1.2でdeprecatedになっています.
想像する手段はサーバのポートに対して、自分で接続要求を出させる
ことですが、では標準入力からのread()メソッドの場合はどうするのか?
となります.
ユーザの標準入力に対する入力を模倣できれば終わることもできる
のかもしれませんが、その方法を私は知りません.
入力待ち状態から抜けることさえできれば、そのThreadのrun()メソッド
を正常に終了させるのはたやすいですね.

実はひがさんの回答がこの問題の回避策なのに
分かってなかったらすみません.
補足:上記の入力待ち状態はinterrupt()が効きません.
(一応subjectに関連づけて・・・)
-----------------------------------------------
shin@xxxxxxxxxx
-----------------------------------------------