我目前正在编写一个小型Java程序,其中有一个客户端向服务器发送命令。一个单独的线程正在处理来自该服务器的回复(回复通常非常快)。理想情况下,我暂停发出服务器请求的线程,直到收到回复或超过某个时间限制为止。

我当前的解决方案如下所示:

public void waitForResponse(){
    thisThread = Thread.currentThread();
    try {
        thisThread.sleep(10000);
        //This should not happen.
        System.exit(1);
    }
    catch (InterruptedException e){
        //continue with the main programm
    }
}

public void notifyOKCommandReceived() {
    if(thisThread != null){
        thisThread.interrupt();
    }
}


主要问题是:该代码在一切正常进行时会引发异常,并在发生不良情况时终止。解决此问题的好方法是什么?

最佳答案

有多个并发原语,它们使您可以实现线程通信。您可以使用CountDownLatch完成类似的结果:

public void waitForResponse() {
    boolean result = latch.await(10, TimeUnit.SECONDS);
    // check result and react correspondingly
}

public void notifyOKCommandReceived() {
    latch.countDown();
}


发送请求之前初始化闩锁,如下所示:

latch = new CountDownLatch(1);

10-02 10:25