From e6ab61593196d743764977325153d660e1d9a05e Mon Sep 17 00:00:00 2001 From: Denny Date: Sun, 29 Jan 2017 06:26:12 -0500 Subject: [PATCH] Updates the overflowable queue to reduce thread contention on the queue size monitor --- src/sample/OverflowableTransferQueue.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/sample/OverflowableTransferQueue.java b/src/sample/OverflowableTransferQueue.java index e872fb5e..24f4b949 100644 --- a/src/sample/OverflowableTransferQueue.java +++ b/src/sample/OverflowableTransferQueue.java @@ -55,15 +55,14 @@ public class OverflowableTransferQueue { if(!mOverflow) { - if(mCounter.get() > mMaximumSize) + mQueue.offer(e); + + int size = mCounter.incrementAndGet(); + + if(size > mMaximumSize) { setOverflow(true); } - else - { - mQueue.offer(e); - mCounter.incrementAndGet(); - } } } @@ -76,7 +75,12 @@ public class OverflowableTransferQueue if(drainCount > 0) { - mCounter.addAndGet(-drainCount); + int size = mCounter.addAndGet(-drainCount); + + if(mOverflow && size <= mResetThreshold) + { + setOverflow(false); + } } return drainCount;