@Override public boolean add(E e) { queueingStrategy.onBeforeAdd(e); try { return super.add(e); } finally { queueingStrategy.onAfterAdd(); } }
@Override public E poll() { queueingStrategy.onBeforeRemove(); E value = null; try { return value = super.poll(); } finally { queueingStrategy.onAfterRemove(value); } }
@Override public void put(E e) throws InterruptedException { queueingStrategy.onBeforeAdd(e); try { super.put(e); } finally { queueingStrategy.onAfterAdd(); } }
@Override public E take() throws InterruptedException { queueingStrategy.onBeforeRemove(); E value = null; try { return value = super.take(); } finally { queueingStrategy.onAfterRemove(value); } }
@Override public E poll(long timeout, TimeUnit unit) throws InterruptedException { queueingStrategy.onBeforeRemove(); E value = null; try { return value = super.poll(timeout, unit); } finally { queueingStrategy.onAfterRemove(value); } }