我有一个应用程序可以监听指定主机名和端口上的传入连接。使用 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()
。
关于java - 中断正在等待来自套接字的 IO 的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8818703/