private boolean getNodeReachability(final String ip) {
// TODO Auto-generated method stub
if(!nodeReachabilityStatusMap.containsKey(ip)){
statusAvailable = Boolean.FALSE;
new Thread(){
public void run(){
while(true){
if(nodeReachabilityStatusMap.containsKey(ip)){
statusAvailable = Boolean.TRUE;
notifyAll();
break;
}
}
}
}.start();
while(statusAvailable==Boolean.FALSE){
try{
wait(5000);
}catch(InterruptedException ex){
Log.addInLog(Log.DBG, ex.getMessage());
}
}
}
return nodeReachabilityStatusMap.get(ip);
}
实际上getNodeReachability
函数返回节点可访问或不可访问的状态,该状态正在维护中nodeReachabilityStatusMap
,我将在其他代码部分中更新获取通知。问题是如果通知被延迟,那么我需要等到我在这张地图中找到条目。所以我正在生成新的线程(在函数内部),它正在检查和通知当前线程。我没有使用同步关键字。所以它会如何表现以及任何正确的方法。