/** {@inheritDoc} */ @Override protected Collection<E> dequeue0(int cnt) { WindowHolder tup = ref.get(); AtomicInteger size = tup.size(); Collection<T> evts = tup.collection(); Collection<E> resCol = new ArrayList<>(cnt); while (true) { int curSize = size.get(); if (curSize > 0) { if (size.compareAndSet(curSize, curSize - 1)) { E res = pollInternal(evts, tup.set()); if (res != null) { resCol.add(res); if (resCol.size() >= cnt) return resCol; } else { size.incrementAndGet(); return resCol; } } } else return resCol; } }
/** {@inheritDoc} */ @Override protected Collection<E> pollEvicted0(int cnt) { Collection<E> res = new ArrayList<>(cnt); for (int i = 0; i < cnt; i++) { E evicted = pollEvictedInternal(); if (evicted == null) return res; res.add(evicted); } return res; }