我遇到一个奇怪的问题,我有一个线程用于侦听套接字上的传入消息。该线程是全局声明的,但在方法listen()中实例化。这允许我从另一个方法stopListen()中断它,但是当第一次调用listen()和stopListen()时,它看起来不会被中断。代码评论为“做一些事情”在第二次等待传入消息后仍然执行。以下是代码的简化版本。执行多次中断的Java线程
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();
}
}
我明白它有点奇怪,有一个变量和一个叫做相同事物的方法。应该这样做还是不能通过多次使用全局变量来中断线程?
谢谢。
你叫'listen()'多少次?每次调用都会启动一个新线程。发布使用类的代码。 – chr
listen()在应用程序加载时调用。然后,我有一个JDialog,在它的构造函数调用stopListen(),并在其关闭的方法听 “this.addWindowListener(新WindowAdapter的(){ @覆盖 公共无效的windowClosed(WindowEvent五){ con.listen(); } });' – user2297216
对上面评论中格式不好的道歉,我在stackoverflow上的第一篇文章。只是为了澄清,只有一个JDialog是打开的,并且希望当这个线程被中断时。 – user2297216