Author: markt Date: Tue Mar 15 20:37:58 2016 New Revision: 1735165 URL: http://svn.apache.org/viewvc?rev=1735165&view=rev Log: Fix POOL-307 Replace inefficient use of keySet with entrySet in GKOP.
Modified: commons/proper/pool/trunk/src/changes/changes.xml commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java Modified: commons/proper/pool/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/changes/changes.xml?rev=1735165&r1=1735164&r2=1735165&view=diff ============================================================================== --- commons/proper/pool/trunk/src/changes/changes.xml (original) +++ commons/proper/pool/trunk/src/changes/changes.xml Tue Mar 15 20:37:58 2016 @@ -56,9 +56,12 @@ The <action> type attribute can be add,u threads try to borrow an object at the same time and the factory fails to create any objects. </action> - <action dev="markt" issue="POOL-280" tyoe="update" due-to="Jacopo Cappellato"> + <action dev="markt" issue="POOL-280" type="update" due-to="Jacopo Cappellato"> Small refactoring of borrowObject() to reduce code duplication. </action> + <action dev="markt" issue="POOL-307" type="update" due-to="Anthony Whitford"> + Replace inefficient use of keySet with entrySet in GKOP. + </action> </release> <release version="2.4.2" date="2015-08-01" description= "This is a patch release, including bug fixes only."> Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java?rev=1735165&r1=1735164&r2=1735165&view=diff ============================================================================== --- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java (original) +++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java Tue Mar 15 20:37:58 2016 @@ -738,13 +738,14 @@ public class GenericKeyedObjectPool<K,T> // build sorted map of idle objects final Map<PooledObject<T>, K> map = new TreeMap<PooledObject<T>, K>(); - for (final K k : poolMap.keySet()) { - final ObjectDeque<T> queue = poolMap.get(k); + for (Map.Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) { + final K k = entry.getKey(); + final ObjectDeque<T> deque = entry.getValue(); // Protect against possible NPE if key has been removed in another // thread. Not worth locking the keys while this loop completes. - if (queue != null) { + if (deque != null) { final LinkedBlockingDeque<PooledObject<T>> idleObjects = - queue.getIdleObjects(); + deque.getIdleObjects(); for (final PooledObject<T> p : idleObjects) { // each item into the map using the PooledObject object as the // key. It then gets sorted based on the idle time @@ -800,8 +801,9 @@ public class GenericKeyedObjectPool<K,T> int maxQueueLength = 0; LinkedBlockingDeque<PooledObject<T>> mostLoaded = null; K loadedKey = null; - for (final K k : poolMap.keySet()) { - final ObjectDeque<T> deque = poolMap.get(k); + for (Map.Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) { + final K k = entry.getKey(); + final ObjectDeque<T> deque = entry.getValue(); if (deque != null) { final LinkedBlockingDeque<PooledObject<T>> pool = deque.getIdleObjects(); final int queueLength = pool.getTakeQueueLength(); @@ -837,8 +839,8 @@ public class GenericKeyedObjectPool<K,T> * {@code false} */ private boolean hasBorrowWaiters() { - for (final K k : poolMap.keySet()) { - final ObjectDeque<T> deque = poolMap.get(k); + for (Map.Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) { + final ObjectDeque<T> deque = entry.getValue(); if (deque != null) { final LinkedBlockingDeque<PooledObject<T>> pool = deque.getIdleObjects(); @@ -1371,14 +1373,15 @@ public class GenericKeyedObjectPool<K,T> public Map<String,Integer> getNumWaitersByKey() { final Map<String,Integer> result = new HashMap<String,Integer>(); - for (final K key : poolMap.keySet()) { - final ObjectDeque<T> queue = poolMap.get(key); - if (queue != null) { + for (Map.Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) { + final K k = entry.getKey(); + final ObjectDeque<T> deque = entry.getValue(); + if (deque != null) { if (getBlockWhenExhausted()) { - result.put(key.toString(), Integer.valueOf( - queue.getIdleObjects().getTakeQueueLength())); + result.put(k.toString(), Integer.valueOf( + deque.getIdleObjects().getTakeQueueLength())); } else { - result.put(key.toString(), Integer.valueOf(0)); + result.put(k.toString(), Integer.valueOf(0)); } } } @@ -1401,13 +1404,14 @@ public class GenericKeyedObjectPool<K,T> final Map<String,List<DefaultPooledObjectInfo>> result = new HashMap<String,List<DefaultPooledObjectInfo>>(); - for (final K key : poolMap.keySet()) { - final ObjectDeque<T> queue = poolMap.get(key); - if (queue != null) { + for (Map.Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) { + final K k = entry.getKey(); + final ObjectDeque<T> deque = entry.getValue(); + if (deque != null) { final List<DefaultPooledObjectInfo> list = new ArrayList<DefaultPooledObjectInfo>(); - result.put(key.toString(), list); - for (final PooledObject<T> p : queue.getAllObjects().values()) { + result.put(k.toString(), list); + for (final PooledObject<T> p : deque.getAllObjects().values()) { list.add(new DefaultPooledObjectInfo(p)); } }