【发布时间】:2013-04-18 23:43:18
【问题描述】:
我遇到了一个奇怪的问题,我有一个线程用于侦听套接字上的传入消息。线程是全局声明的,但在方法listen() 中实例化。这使我可以从另一个方法 stopListen() 中断它,该方法第一次完美运行,但是当第二次调用 listen() 和 stopListen() 时,它似乎没有被中断。注释为“做一些事情”的代码在第二次等待传入消息后仍会执行。以下是代码的精简版。
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()打了多少次电话?每次调用都会启动一个新线程。发布使用这些类的代码。 -
listen() 在应用程序加载时被调用。然后我有一个 JDialog,它在其构造函数中调用 stopListen() 并在其关闭方法中侦听 'this.addWindowListener(new WindowAdapter() { @Override public void windowClosed(WindowEvent e) { con.listen(); } });'
-
对上面评论的格式不佳表示歉意,这是我在 stackoverflow 上的第一篇文章。只是为了澄清一下,只有一个 JDialog 打开并希望该线程在它打开时被中断。
标签: java multithreading