Java 我可以杀死一个正在等待TCP连接的线程吗?

Java 我可以杀死一个正在等待TCP连接的线程吗?,java,multithreading,networking,Java,Multithreading,Networking,我有一个应用程序,其中一个线程正在侦听TCP连接,需要终止。最好的方法是什么?我知道Thread.stop已被弃用,中断线程是否足够 通常-是的,您应该使用和一个共享变量。在您的特定示例中,只需关闭套接字即可使线程立即返回。阅读它。如果您有对服务器套接字的引用,您可以调用它的方法。这将导致等待accept()的线程抛出SocketException 请注意,您可能不想公开对套接字本身的引用;您可能应该在服务器代码中添加一个名为shutdownServer()或类似的方法,该方法本身就是这样做的。

我有一个应用程序,其中一个线程正在侦听TCP连接,需要终止。最好的方法是什么?我知道Thread.stop已被弃用,中断线程是否足够

通常-是的,您应该使用和一个共享变量。在您的特定示例中,只需关闭套接字即可使线程立即返回。阅读它。

如果您有对
服务器套接字的引用,您可以调用它的方法。这将导致等待
accept()
的线程抛出
SocketException

请注意,您可能不想公开对套接字本身的引用;您可能应该在服务器代码中添加一个名为
shutdownServer()
或类似的方法,该方法本身就是这样做的。

您可以设置一个“stop”变量,线程在每次连接后检查该变量。然后连接到线程的端口以唤醒它

另一种方法是通过调用
soTimeout()
设置超时,并在每次连接后以及超时发生时检查“stop”变量。您可能不想将超时设置得太短。这意味着线程不会立即停止,因此如果需要快速关闭,这可能不适用于您


如Mark Peters所述,您也可以直接在ServerSocket上调用close()。

InterruptedException
是一个选中的异常(并且
accept()
不声明它),因此无论中断线程会发生什么,您都不应该期望在调用
ServerSocket.accept()时捕捉到它
。我必须尝试一下,看看中断线程是否有任何影响。我猜不会。好吧,是的,我试过了,中断线程不会抢占对
accept()
的调用,它只是一直在等待……只要他不使用java nio。