ソケットで受信メッセージをリッスンするためにスレッドが使用されているという奇妙な問題が発生しています。スレッドはグローバルに宣言されますが、メソッド listen() 内でインスタンス化されます。これにより、最初は完全に機能する別のメソッド stopListen() から中断できますが、listen() と stopListen() が 2 回目に呼び出されると、中断されないように見えます。「Do some stuff」とコメントされたコードは、着信メッセージを 2 回待った後も実行されます。以下は、コードの短縮バージョンです。
public class Con {
private Thread listen;
public void listen() {
listen = new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted()) {
//Wait for an incoming message
if (!Thread.interrupted()){
//Do some stuff
}
}
}
});
listen.start();
}
public void stopListen() {
listen.interrupt();
}
}
同じものと呼ばれる変数とメソッドを持つのは少し奇妙です。これは機能するはずですか、それともグローバル変数を複数回使用してスレッドを中断できませんか?
ありがとう。