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

[jfriends] Re: Thread#interrupt()




下村です。

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

僕は対戦型ネットワークゲームを作るためにソケットまわりを
いじっているのですが、僕のやった限りでは Thread#stop() を
使っても止まりませんでした。
(もちろん、accept() から処理が帰ってきた時点で ThreadDeath が
  発生しますが)
不思議なことに、スレッドが停止していないのに join() が
帰ってきちゃうんです。これじゃ使い物になりません。

結局、ServerSocket#close() を外部スレッドに呼ばせて
SocketException を catch する方法で解決しました。

shin> Thread#stop()はご存じの通りJDK1.2でdeprecatedになっています.

それは知りませんでした。どうりで interrupt() が必要なわけですね。

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