如何在Java中断等待传入连接的线程

时间:2016-07-13 17:19:26

标签: java multithreading serversocket

我有以下设置:首先我使用Swift作为我的主机。然后我想按一个按钮并开始一个新线程。如果我再次按下按钮,螺纹应该停止。线程正在等待 TCP-Connection

ServerSocket clientSocket = welcomeSocket.accept();

现在我尝试在GUI thread.interrupt();中调用以停止线程,但它无法正常工作.accept是一个阻塞系统调用。如何阻止线程等待新连接?我不想使用thread.stop(),因为它已被弃用。

任何解决方案吗?

1 个答案:

答案 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