Author: tv
Date: Tue Jan 19 10:17:03 2016
New Revision: 1725462

URL: http://svn.apache.org/viewvc?rev=1725462&view=rev
Log:
Address concurrency issues reported by Findbugs

Modified:
    
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java

Modified: 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java?rev=1725462&r1=1725461&r2=1725462&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java
 Tue Jan 19 10:17:03 2016
@@ -26,7 +26,6 @@ import java.util.concurrent.ConcurrentHa
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.ReentrantLock;
 
 import 
org.apache.commons.jcs.utils.threadpool.PoolConfiguration.WhenBlockedPolicy;
 import org.apache.commons.logging.Log;
@@ -116,16 +115,12 @@ public class ThreadPoolManager
     /** Map of names to pools. */
     private ConcurrentHashMap<String, ThreadPoolExecutor> pools;
 
-    /** Lock for pools initialization. */
-    private ReentrantLock poolLock;
-
     /**
      * No instances please. This is a singleton.
      */
     private ThreadPoolManager()
     {
         this.pools = new ConcurrentHashMap<String, ThreadPoolExecutor>();
-        this.poolLock = new ReentrantLock();
         configure();
     }
 
@@ -244,33 +239,22 @@ public class ThreadPoolManager
 
         if ( pool == null )
         {
-            poolLock.lock();
-
-            try
+            if ( log.isDebugEnabled() )
             {
-                // double check
-                pool = pools.get( name );
+                log.debug( "Creating pool for name [" + name + "]" );
+            }
 
-                if ( pool == null )
-                {
-                    if ( log.isDebugEnabled() )
-                    {
-                        log.debug( "Creating pool for name [" + name + "]" );
-                    }
-
-                    PoolConfiguration config = loadConfig( PROP_NAME_ROOT + 
"." + name );
-                    pool = createPool( config );
-                    pools.put( name, pool );
-
-                    if ( log.isDebugEnabled() )
-                    {
-                        log.debug( "PoolName = " + getPoolNames() );
-                    }
-                }
+            PoolConfiguration config = loadConfig( PROP_NAME_ROOT + "." + name 
);
+            pool = createPool( config );
+            ThreadPoolExecutor _pool = pools.putIfAbsent( name, pool );
+            if (_pool != null)
+            {
+                pool = _pool;
             }
-            finally
+
+            if ( log.isDebugEnabled() )
             {
-                poolLock.unlock();
+                log.debug( "PoolName = " + getPoolNames() );
             }
         }
 


Reply via email to