我有一个应用程序,其中一个线程正在侦听TCP连接,并且需要被终止。做这个的最好方式是什么?我知道Thread.stop已被废弃,正在中断该线程吗?我可以杀死一个等待TCP连接进入的线程吗?
4
A
回答
7
如果你有一个ServerSocket
的参考,你可以调用它的close()
方法。这会导致accept()
上的线程等待SocketException
。
请注意,您可能不希望公开对套接字本身的引用;你应该在你的服务器代码中添加一个名为shutdownServer()
的方法或类似的方法。
1
一般 - 是的,你应该使用Thread.interrupt()和共享变量。在您的特定示例中,您可以关闭套接字以使线程立即返回。阅读关于它here。
0
您可以设置线程在每次连接后检查的“停止”变量。然后连接到线程的端口来唤醒它。
另一种方法是通过调用soTimeout()
来设置超时,并在每次连接之后和发生超时时检查“停止”变量。您可能不希望将超时设置得太短。这意味着线程不会立即停止,因此如果需要快速关闭,可能无法为您工作。
如果可能的话,您也可以直接在ServerSocket上调用close(),如Mark Peters所述。
相关问题
- 1. 杀死非等待线程
- 2. 我可以杀死这个过程吗?
- 3. C++杀死等待std ::线程
- 4. GDB可以杀死一个特定的线程吗?
- 5. 在等待完成时如何杀死一个Python子进程?
- 6. jdb可以杀死一个java线程吗?
- 7. 我可以杀死Ubuntu上的console-kit-dae进程吗?
- 8. 多个线程可以一次等待一个对象吗?
- 9. 杀死一个线程
- 10. 杀死一个mpi进程
- 11. 有没有办法让一个线程从一个无限的信号量中等待进程被杀死?
- 12. 杀死进程杀死其他进程
- 13. 无法杀死等待互操作对象的线程
- 14. 我应该使用两个可以相互杀死的线程吗?
- 15. 我应该杀死一个以线程运行的函数(.Net)
- 16. iOS可以在后台中杀死一个应用程序吗?
- 17. 杀死进程
- 18. 杀死进程
- 19. 杀死一个特定的线程Python
- 20. 杀死等待条件变量的pthread
- 21. 我可以在死后再次启动一个线程吗?
- 22. 杀死一个悬挂的子进程
- 23. 两个STL线程在可连接的第三个线程上等待?
- 24. 操作系统可以在Linux中随机杀死进程吗?
- 25. 线程进程等待输入
- 26. 我可以杀死关闭Windows中的MySQL服务器的进程mysqld.exe吗?
- 27. 杀死一个线程或替代
- 28. 杀死一个线程不起作用
- 29. 在SwingUtilities.invokeLater()中杀死一个线程
- 30. 在java中杀死一个线程android
'InterruptedException'是一个检查异常(并且'accept()'没有声明它),所以无论中断线程什么时候发生,你都不应该期望在调用'ServerSocket.accept()'时捕获这个线程。我将不得不尝试查看中断线程是否有任何影响。我猜想它没有。 – 2011-04-11 03:24:18
好吧,我试过了,中断线程不会抢占对'accept()'的调用,它只是在等待。 – 2011-04-11 03:36:11
......只要他不使用java nio。 – jdigital 2011-04-11 03:37:07