void trimFinal() { long limit = scheduler.now(unit) - maxAge; TimedNode<Object> h = head; for (;;) { TimedNode<Object> next = h.get(); if (next.get() == null) { if (h.value != null) { TimedNode<Object> lasth = new TimedNode<Object>(null, 0L); lasth.lazySet(h.get()); head = lasth; } else { head = h; } break; } if (next.time > limit) { if (h.value != null) { TimedNode<Object> lasth = new TimedNode<Object>(null, 0L); lasth.lazySet(h.get()); head = lasth; } else { head = h; } break; } h = next; } }
/** * Replace a non-empty head node with an empty one to * allow the GC of the inaccessible old value. */ @Override public void trimHead() { TimedNode<Object> h = head; if (h.value != null) { TimedNode<Object> n = new TimedNode<Object>(null, 0); n.lazySet(h.get()); head = n; } }
void trimFinal() { long limit = scheduler.now(unit) - maxAge; TimedNode<Object> h = head; for (;;) { TimedNode<Object> next = h.get(); if (next.get() == null) { if (h.value != null) { TimedNode<Object> lasth = new TimedNode<Object>(null, 0L); lasth.lazySet(h.get()); head = lasth; } else { head = h; } break; } if (next.time > limit) { if (h.value != null) { TimedNode<Object> lasth = new TimedNode<Object>(null, 0L); lasth.lazySet(h.get()); head = lasth; } else { head = h; } break; } h = next; } }
@Override public void addFinal(Object notificationLite) { TimedNode<Object> n = new TimedNode<Object>(notificationLite, Long.MAX_VALUE); TimedNode<Object> t = tail; tail = n; size++; t.lazySet(n); // releases both the tail and size trimFinal(); done = true; }
/** * Replace a non-empty head node with an empty one to * allow the GC of the inaccessible old value. */ @Override public void trimHead() { TimedNode<Object> h = head; if (h.value != null) { TimedNode<Object> n = new TimedNode<Object>(null, 0); n.lazySet(h.get()); head = n; } }
@Override public void addFinal(Object notificationLite) { TimedNode<Object> n = new TimedNode<Object>(notificationLite, Long.MAX_VALUE); TimedNode<Object> t = tail; tail = n; size++; t.lazySet(n); // releases both the tail and size trimFinal(); done = true; }