如何让线程等待服务器响应

时间:2017-04-10 19:00:34

标签: java multithreading

我目前正在编写一个小型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();
    }
}

主要问题是:当一切正常时,此代码会抛出异常,并在发生错误时终止。解决这个问题的好方法是什么?

1 个答案:

答案 0 :(得分:3)

有多个并发原语允许您实现线程通信。您可以使用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);