我有一个应用程序,其中一个线程正在侦听TCP连接,并且需要被杀死。做这个的最好方式是什么?我知道Thread.stop已被弃用,正在中断线程吗?
答案 0 :(得分:7)
如果您引用了ServerSocket
,则可以调用其close()
方法。这将导致线程等待accept()
抛出SocketException
。
请注意,您可能不希望公开对套接字本身的引用;你应该在你的服务器代码中添加一个名为shutdownServer()
的代码或类似的方法。
答案 1 :(得分:1)
通常 - 是的,您应该使用Thread.interrupt()和共享变量。在您的特定示例中,您可以关闭Socket以使线程立即返回。阅读它here。
答案 2 :(得分:0)
您可以设置线程在每次连接后检查的“停止”变量。然后连接到线程的端口将其唤醒。
另一种方法是通过调用soTimeout()
设置超时,并在每次连接后和超时发生时检查“stop”变量。您可能不希望将超时设置得太短。这意味着线程不会立即停止,因此如果需要快速关闭,这可能对您不起作用。
如果可能的话,你也可以直接在ServerSocket上调用close(),如Mark Peters所述。