我有一个应用程序,用于监听指定主机名和端口上的传入连接。通过方法listen()
(请参见下文)调用侦听,该方法使用ServerSocket.accept()
不断等待传入连接,并创建新的Thread
来处理输入流。中断阻塞从套接字等待IO的线程?
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()
什么来实现?)
正如您所指出的那样,使用标准套接字时,只能通过关闭套接字来实现。这里有几个关于SO处理相同问题的问题,例如http://stackoverflow.com/questions/1510403/how-to-unblock-a-thread-blocked-on-serversocket-accept – 2012-01-11 11:57:56
你是什么意思,它不起作用?它是否会抛出任何异常?或者只是继续平时? – medopal 2012-01-11 12:01:45
@medopal线程只是继续运行而不终止它。 – 2012-01-11 12:05:16