我目前正在编写一个小型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();
}
}
主要问题是:当一切正常时,此代码会抛出异常,并在发生错误时终止。解决这个问题的好方法是什么?
答案 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);