【每日阅读】2020年12月23日-dubbo如何使用Lock、Condition

真诚的希望您能留言与我交流,这会对我有非常大的帮助!

dubbo使用方式如下(简化过的代码):

// 创建锁与条件变量
private final Lock lock 
    = new ReentrantLock();
private final Condition done 
    = lock.newCondition();

// 调用方通过该方法等待结果
Object get(int timeout){
  long start = System.nanoTime();
  lock.lock();
  try {
  while (!isDone()) {
    done.await(timeout);
      long cur=System.nanoTime();
    if (isDone() || 
          cur-start > timeout){
      break;
    }
  }
  } finally {
  lock.unlock();
  }
  if (!isDone()) {
  throw new TimeoutException();
  }
  return returnFromResponse();
}
// RPC结果是否已经返回
boolean isDone() {
  return response != null;
}
// RPC结果返回时调用该方法   
private void doReceived(Response res) {
  lock.lock();
  try {
    response = res;
    if (done != null) {
      done.signal();
    }
  } finally {
    lock.unlock();
  }
}

原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2759

发表评论

邮箱地址不会被公开。 必填项已用*标注

GitHub
分享本页
返回顶部