我可以杀死正在等待TCP连接进入的线程吗?

时间:2011-04-11 03:15:27

标签: java multithreading networking

我有一个应用程序,其中一个线程正在侦听TCP连接,并且需要被杀死。做这个的最好方式是什么?我知道Thread.stop已被弃用,正在中断线程吗?

3 个答案:

答案 0 :(得分:7)

如果您引用了ServerSocket,则可以调用其close()方法。这将导致线程等待accept()抛出SocketException

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

答案 1 :(得分:1)

通常 - 是的,您应该使用Thread.interrupt()和共享变量。在您的特定示例中,您可以关闭Socket以使线程立即返回。阅读它here

答案 2 :(得分:0)

您可以设置线程在每次连接后检查的“停止”变量。然后连接到线程的端口将其唤醒。

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

如果可能的话,你也可以直接在ServerSocket上调用close(),如Mark Peters所述。