繁体   English   中英

Java线程执行然后被多次中断

[英]Java threads executing then being interupted multiple times

我有一个奇怪的问题,我有一个线程用于侦听套接字上的传入消息。 该线程是全局声明的,但在方法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();
    }
}

我知道有一个变量和一个叫做同一件事的方法有点奇怪。 这应该可行吗,还是我不能多次使用全局变量来中断线程?

谢谢。

我看到的主要问题是, interrupted()会重置中断标志(请参阅链接的文档),这意味着下一次对interrupted()调用将返回false,除非再次被中断。 而是使用isInterrupted()不会清除标志!

另外,正如chr所说,如果您启动多个线程(多次调用listen() ),您将只能中断最新的线程。 在这种情况下,请创建一个线程List并将其全部中断(或仅中断List中的第一个线程,然后将其从列表中删除,或使用任何所需的功能)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM