You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tv...@apache.org on 2016/01/19 11:17:03 UTC
svn commit: r1725462 -
/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java
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() );
}
}