【问题标题】:How to interrupt a Thread in Java which waits for incoming Connection [duplicate]如何中断等待传入连接的Java线程[重复]
【发布时间】:2016-11-16 09:57:08
【问题描述】:

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

ServerSocket clientSocket = welcomeSocket.accept();

现在我尝试在 GUI 中调用 thread.interrupt(); 来停止线程,但由于 .accept 是阻塞系统调用,它无法正常工作。我该怎么做才能阻止线程等待新连接?我不想使用thread.stop(),因为它已被弃用。

有什么解决办法吗?

【问题讨论】:

    标签: java multithreading serversocket


    【解决方案1】:

    如果没有任何连接,您可以使用setSoTimeout(1000) 使对 accept() 的调用在 1 秒后超时(通过抛出 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
    

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 2016-05-25
      • 1970-01-01
      • 2012-02-18
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多