サーバーアプリケーションのある時点で、I/Oブロッキング操作を実行しているいくつかのスレッドを停止したいと思います。
たとえば、そのうちの1つには次のrun()
方法があります。
public void run() {
System.out.println("GWsocket thread running");
int len;
byte [] buffer = new byte[1500];
try {
this.in = new DataInputStream(this.socket.getInputStream());
this.out = new DataOutputStream(this.socket.getOutputStream());
running = true;
while (running){
len = in.read (buffer);
if (len < 0)
running = false;
else
parsepacket (buffer, len);
}
}catch (IOException ex) {
System.out.println("GWsocket catch IOException: "+ex);
}finally{
try {
System.out.println("Closing GWsocket");
fireSocketClosure();
in.close();
out.close();
socket.close();
}catch (IOException ex) {
System.out.println("GWsocket finally IOException: "+ex);
}
}
}
このコードを実行しているスレッドを停止したい場合は、どうすればよいですか?
ここでは、その方法を示しています(たとえば、入力を長時間待機するスレッドを停止するにはどうすればよいですか?)が、その意味がわかりません。
この手法を機能させるには、割り込み例外をキャッチし、それを処理する準備ができていないメソッドが、すぐに例外を再度アサートすることが重要です。例外を再スローすることが常に可能であるとは限らないため、再スローではなく再アサートと言います。InterruptedExceptionをキャッチするメソッドが、この(チェックされた)例外をスローするように宣言されていない場合は、次の呪文で「それ自体を再中断」する必要があります。Thread.currentThread()。interrupt();
誰かが私にいくつかのヒントを与えることができますか?いくつかのコード例をいただければ幸いです。