我有以下设置:首先我使用Swift作为我的主机。然后我想按一个按钮并开始一个新线程。如果我再次按下按钮,螺纹应该停止。线程正在等待 TCP-Connection :
ServerSocket clientSocket = welcomeSocket.accept();
现在我尝试在GUI thread.interrupt();
中调用以停止线程,但它无法正常工作.accept是一个阻塞系统调用。如何阻止线程等待新连接?我不想使用thread.stop()
,因为它已被弃用。
任何解决方案吗?
答案 0 :(得分:0)
如果没有连接,您可以使用setSoTimeout(1000)
在1秒后调用accept()超时(通过抛出java.net.SocketTimeoutException)。然后您可以按如下方式检查循环中的线程信号:
try (ServerSocket serverSocket = new ServerSocket(8080)) {
serverSocket.setSoTimeout(1000);
//active is a volatile boolean manipulated by the control thread
while (active) {
try {
Socket s = serverSocket.accept();
somebodyConnected(s); //do something important here
catch (java.net.SocketTimeoutException) {} //expected
}
System.out.println("exiting");
} //the try-with-resources ensures the ServerSocket is gracefully closed