我有一個應用程序,其中一個線程正在偵聽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