diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java index 347bdc2f..3a653435 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java @@ -19,7 +19,6 @@ import static com.zaxxer.hikari.util.PoolUtilities.IS_JAVA7; import java.lang.ref.WeakReference; import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; @@ -77,7 +76,7 @@ public final class ConcurrentBag void addBagItem(); } - private final ThreadLocal>> threadList; + private final ThreadLocal>> threadList; private final CopyOnWriteArrayList sharedList; private final Synchronizer synchronizer; private final AtomicLong sequence; @@ -92,7 +91,7 @@ public final class ConcurrentBag this.synchronizer = new Synchronizer(); this.sequence = new AtomicLong(1); this.listener = null; - this.threadList = new ThreadLocal>>(); + this.threadList = new ThreadLocal>>(); } /** @@ -104,7 +103,7 @@ public final class ConcurrentBag this.synchronizer = new Synchronizer(); this.sequence = new AtomicLong(1); this.listener = listener; - this.threadList = new ThreadLocal>>(); + this.threadList = new ThreadLocal>>(); } /** @@ -120,13 +119,13 @@ public final class ConcurrentBag public T borrow(long timeout, final TimeUnit timeUnit) throws InterruptedException { // Try the thread-local list first - final LinkedList> list = threadList.get(); + final ArrayList> list = threadList.get(); if (list == null) { - threadList.set(new LinkedList>()); + threadList.set(new ArrayList>(16)); } else { - for (int i = list.size(); i > 0; i--) { - final BagEntry bagEntry = list.removeLast().get(); + for (int i = list.size() - 1; i >= 0; i--) { + final BagEntry bagEntry = list.remove(i).get(); if (bagEntry != null && bagEntry.state.compareAndSet(STATE_NOT_IN_USE, STATE_IN_USE)) { return (T) bagEntry; } @@ -172,7 +171,7 @@ public final class ConcurrentBag public void requite(final T bagEntry) { if (bagEntry.state.compareAndSet(STATE_IN_USE, STATE_NOT_IN_USE)) { - final LinkedList> list = threadList.get(); + final ArrayList> list = threadList.get(); if (list != null) { list.add(new WeakReference(bagEntry)); } diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java b/hikaricp/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java index a1074ddc..8ab1415d 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/util/ConcurrentBag.java @@ -17,7 +17,6 @@ package com.zaxxer.hikari.util; import java.lang.ref.WeakReference; import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; @@ -76,7 +75,7 @@ public final class ConcurrentBag void addBagItem(); } - private final ThreadLocal>> threadList; + private final ThreadLocal>> threadList; private final CopyOnWriteArrayList sharedList; private final Synchronizer synchronizer; private final AtomicLong sequence; @@ -91,7 +90,7 @@ public final class ConcurrentBag this.synchronizer = new Synchronizer(); this.sequence = new AtomicLong(1); this.listener = null; - this.threadList = new ThreadLocal>>(); + this.threadList = new ThreadLocal>>(); } /** @@ -103,7 +102,7 @@ public final class ConcurrentBag this.synchronizer = new Synchronizer(); this.sequence = new AtomicLong(1); this.listener = listener; - this.threadList = new ThreadLocal>>(); + this.threadList = new ThreadLocal>>(); } /** @@ -119,13 +118,13 @@ public final class ConcurrentBag public T borrow(long timeout, final TimeUnit timeUnit) throws InterruptedException { // Try the thread-local list first - final LinkedList> list = threadList.get(); + final ArrayList> list = threadList.get(); if (list == null) { - threadList.set(new LinkedList>()); + threadList.set(new ArrayList>(16)); } else { - for (int i = list.size(); i > 0; i--) { - final BagEntry bagEntry = list.removeLast().get(); + for (int i = list.size() - 1; i >= 0; i--) { + final BagEntry bagEntry = list.remove(i).get(); if (bagEntry != null && bagEntry.state.compareAndSet(STATE_NOT_IN_USE, STATE_IN_USE)) { return (T) bagEntry; } @@ -171,7 +170,7 @@ public final class ConcurrentBag public void requite(final T bagEntry) { if (bagEntry.state.compareAndSet(STATE_IN_USE, STATE_NOT_IN_USE)) { - final LinkedList> list = threadList.get(); + final ArrayList> list = threadList.get(); if (list != null) { list.add(new WeakReference(bagEntry)); }