java - 中断正在等待来自套接字的 IO 的线程?

标签 java multithreading serversocket

我有一个应用程序可以监听指定主机名和端口上的传入连接。使用 listen() 方法调用监听(见下文),该方法使用 ServerSocket.accept() 持续等待传入连接,创建一个新的 Thread 处理输入流。

private ServerSocket serverSocket;
private Thread listenerThread;

public void listen() throws IOException {
    this.listenerThread = new Thread(new Runnable() {

        @Override
        public void run() {
            while (true) {
                try {
                    Socket socket = TheServerClass.this.serverSocket.accept();
                    // Create new thread to handle the incoming connection
                }
                catch (IOException exc) { }
            }
        }
    });
    this.listenerThread.start();
}

现在我想停止listenerThread的运行。但是当我调用 this.listenerThread.interrupt() 时,这不起作用。
我以为你可以通过中断线程来停止它,那么为什么这不起作用呢?

(注意:一个可能的解决方案是使用 this.serverSocket.close() 关闭 ServerSocket,但是可以通过以下方式完成吗interrupt() 还是什么?)

最佳答案

调用serverSocket.close()

我想既然你还没有进行 IO - 你不能中断它,并且由于 accept() 不会抛出 InterruptedException 你将无法中断它。线程被中断,但是您必须自己检查该标志Thread.isInterrupted()

参见How can I interrupt a ServerSocket accept() method?

关于java - 中断正在等待来自套接字的 IO 的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8818703/

相关文章:

java - JMS:无法通过选择器从主题中选择 jms 消息

java - 弦乐与表演

.net - 从 Monitor 所有者以外的另一个线程释放锁

java - Android 套接字到 Java ServerSocket 连接

java - 存在从类 A 的对象到类 B 的对象的引用。如果 A 被序列化,我们是否可能会丢失 B 的对象?

java - 如何让数字键盘上的 "done"按钮做一些 Action ?

multithreading - 由于线程化,将值移出闭包

c++ - boost::asio 异步条件

java - 错误 : java. io.IOException:流已关闭

java - 来回发送对象到线程