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