私は、指定されたホスト名とポートで着信接続を待ち受けるアプリケーションを持っています。リスニングは、listen()
(以下を参照)メソッドで呼び出されます。これは、入力ストリームを処理するための新しいThread
を作成して、受信接続を常に受信するためにServerSocket.accept()
を使用して待機します。ソケットからIOを待っているスレッドを中断していますか?
private ServerSocket serverSocket;
private Thread listenerThread;
public void listen() throws IOException {
this.listenerThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Socket socket = TheServerClass.this.serverSocket.accept();
// Create new thread to handle the incoming connection
}
catch (IOException exc) { }
}
}
});
this.listenerThread.start();
}
ここでは、実行を中止したいと考えています。listenerThread
しかし、私がthis.listenerThread.interrupt()
に電話すると、これは動作しません。
スレッドを中断してスレッドを停止できると思ったのですが、なぜそれが機能していないのですか?
(お知らせ:可能な解決策は、this.serverSocket.close()
を使用してServerSocket
を閉じることであるが、それはinterrupt()
か何かを達成することができますか?)
標準ソケットを使用する場合、これはソケットを閉じることによってのみ可能です。同じ問題を扱っているので、ここでいくつかの質問があります。 http://stackoverflow.com/questions/1510403/how-to-unblock-a-thread-blocked-on-serversocket-accept –
それは機能しないとはどういう意味ですか?それは何か例外を投げますか?それとも普通は続きますか? – medopal
@medopalスレッドは終了せずに実行を継続します。 –