java.util.concurrent.ConcurrentLinkedDeque#pollFirst ( )源码实例Demo

下面列出了java.util.concurrent.ConcurrentLinkedDeque#pollFirst ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: reactor-pool   文件: SimpleLifoPool.java
@Override
Borrower<POOLABLE> pendingPoll() {
    ConcurrentLinkedDeque<Borrower<POOLABLE>> q = this.pending;
    Borrower<POOLABLE> b = q.pollFirst();
    if (b != null) PENDING_COUNT.decrementAndGet(this);
    return b;
}
 
private static List<MessagePromise<?>> removeAll(ConcurrentLinkedDeque<MessagePromise<?>> deque) {
  final List<MessagePromise<?>> result = new LinkedList<>();
  MessagePromise<?> promise;

  while ((promise = deque.pollFirst()) != null) {
    result.add(promise);
  }
  return result;
}
 
源代码3 项目: SparkRDMA   文件: RdmaChannel.java
private void rdmaPostWRList(LinkedList<IbvSendWR> sendWRList) throws IOException {
  if (isError() || isStopped.get()) {
    throw new IOException("QP is in error state, can't post new requests");
  }

  ConcurrentLinkedDeque<SVCPostSend> stack;
  SVCPostSend svcPostSendObject;

  int numWrElements = sendWRList.size();
  // Special case for 0 sgeElements when rdmaSendWithImm
  if (sendWRList.size() == 1 && sendWRList.getFirst().getNum_sge() == 0) {
    numWrElements = NOOP_RESERVED_INDEX;
  }

  stack = svcPostSendCache.computeIfAbsent(numWrElements,
    numElements -> new ConcurrentLinkedDeque<>());

  // To avoid buffer allocations in disni update cached SVCPostSendObject
  if (sendWRList.getFirst().getOpcode() == IbvSendWR.IbvWrOcode.IBV_WR_RDMA_READ.ordinal()
      && (svcPostSendObject = stack.pollFirst()) != null) {
    int i = 0;
    for (IbvSendWR sendWr: sendWRList) {
      SVCPostSend.SendWRMod sendWrMod = svcPostSendObject.getWrMod(i);

      sendWrMod.setWr_id(sendWr.getWr_id());
      sendWrMod.setSend_flags(sendWr.getSend_flags());
      // Setting up RDMA attributes
      sendWrMod.getRdmaMod().setRemote_addr(sendWr.getRdma().getRemote_addr());
      sendWrMod.getRdmaMod().setRkey(sendWr.getRdma().getRkey());
      sendWrMod.getRdmaMod().setReserved(sendWr.getRdma().getReserved());

      if (sendWr.getNum_sge() == 1) {
        IbvSge sge = sendWr.getSge(0);
        sendWrMod.getSgeMod(0).setLkey(sge.getLkey());
        sendWrMod.getSgeMod(0).setAddr(sge.getAddr());
        sendWrMod.getSgeMod(0).setLength(sge.getLength());
      }
      i++;
    }
  } else {
    svcPostSendObject = qp.postSend(sendWRList, null);
  }

  svcPostSendObject.execute();
  // Cache SVCPostSend objects only for RDMA Read requests
  if (sendWRList.getFirst().getOpcode() == IbvSendWR.IbvWrOcode.IBV_WR_RDMA_READ.ordinal()) {
    stack.add(svcPostSendObject);
  } else {
    svcPostSendObject.free();
  }
}