私はソケット接続を処理するスレッドを持っている:ソケット接続を処理するスレッドを終了するには?
BufferedReader socketInput = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
while (true)
{
String line = socketInput.readLine();
// do stuff
}
私はこのサイトには、いくつかの答えを読んでてきたように、推奨される解決策は一つのスレッドのセットと私(ソケットハンドリング)スレッドフラグを使用することですそのフラグが状態を変更すると、自身をチェックして終了します。ような何か:readLine()
はまだ入力を待っているとき
while (!done)
{
String line = socketInput.readLine();
// do stuff
}
は、しかし、これははまり込むことができます。私はタイムアウトを設定することができると思います。おそらく動作しますが、私はまだ私のスレッドの前に100ミリ秒の遅延になるだろう
mySocket.setSoTimeout(100);
while (!done)
{
String line = socketInput.readLine();
// do stuff
}
は「実現」フラグの状態が変更されました。
すぐにスレッドを「実現」する方法はありますか?そうでない場合は、私の解決策(タイムアウトとフラグdone
)は正しいですか?
編集:socketInput
のタイプがBufferedReader
であることを明確にしました(あるいは、私はScanner
と考えています)。
はhttp://stackoverflow.com/questions/12315149/interrupt-stop-thread-with-socket-ioも参照してください。 -blocking-operation – Matthieu
私の答えを編集して、チャネルを使った非同期I/Oがそれほど大したことではないことを証明しようとしました。私はあなたがそれが面白いと幸せな新年を見つけることを願っています! :) – Matthieu