我有一个线程(假设它叫做ConnListener),通过ServerSocket
的accept()
方法监听传入的连接。
在另一个线程(称其为StartStopSwitch)中,我希望停止监听线程,并且不再侦听给定地址和端口。
我可以使用Thread.interrupt()
来杀死线程,但是当我通过netstat
命令检查已使用的端口时,仍然会看到状态为“LISTENING”的端口。 我想要“释放”(或“解除绑定”)ServerSocket
,而不会抛出异常,因此在使用netstat
时不会显示它。
现在我该怎么做?
interrupt()
来杀死线程。accept()
方法是不可中断的。只需关闭套接字即可。你会收到一个异常,你必须接受它。 - user207421ServerSocket
进行监听),*interrupt()
将不起作用*。线程状态仍然为Thread.State.RUNNABLE
。 - MC EmperorServerSocket.accept()
不是可中断的操作。只有InterruptibleChannels
具有可中断的操作,但它们并没有太大用处,因为中断会关闭通道,这是由于 Linux 的一种特殊性质必须传播到所有平台。 - user207421