@InterfaceAudience.Private public abstract class ObjectPool<K,V> extends Object
Modifier and Type | Class and Description |
---|---|
static interface |
ObjectPool.ObjectFactory<K,V>
An
ObjectFactory object is used to create
new shared objects on demand. |
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_CONCURRENCY_LEVEL
The default concurrency level,
used when not otherwise specified in a constructor.
|
static int |
DEFAULT_INITIAL_CAPACITY
The default initial capacity,
used when not otherwise specified in a constructor.
|
private ObjectPool.ObjectFactory<K,V> |
objectFactory |
private Lock |
purgeLock
For preventing parallel purge
|
protected ConcurrentMap<K,Reference<V>> |
referenceCache
Does not permit null keys.
|
protected ReferenceQueue<V> |
staleRefQueue |
Constructor and Description |
---|
ObjectPool(ObjectPool.ObjectFactory<K,V> objectFactory)
Creates a new pool with the default initial capacity (16)
and the default concurrency level (16).
|
ObjectPool(ObjectPool.ObjectFactory<K,V> objectFactory,
int initialCapacity)
Creates a new pool with the given initial capacity
and the default concurrency level (16).
|
ObjectPool(ObjectPool.ObjectFactory<K,V> objectFactory,
int initialCapacity,
int concurrencyLevel)
Creates a new pool with the given initial capacity
and the given concurrency level.
|
Modifier and Type | Method and Description |
---|---|
abstract Reference<V> |
createReference(K key,
V obj)
Create a reference associated with the given object
|
V |
get(K key)
Returns a shared object associated with the given
key ,
which is identified by the equals method. |
abstract K |
getReferenceKey(Reference<V> ref)
Get key of the given reference
|
void |
purge()
Removes stale references of shared objects from the pool.
|
int |
size()
Returns an estimated count of objects kept in the pool.
|
protected final ReferenceQueue<V> staleRefQueue
private final ObjectPool.ObjectFactory<K,V> objectFactory
protected final ConcurrentMap<K,Reference<V>> referenceCache
public static final int DEFAULT_INITIAL_CAPACITY
public static final int DEFAULT_CONCURRENCY_LEVEL
public ObjectPool(ObjectPool.ObjectFactory<K,V> objectFactory)
objectFactory
- the factory to supply new objects on demandNullPointerException
- if objectFactory
is nullpublic ObjectPool(ObjectPool.ObjectFactory<K,V> objectFactory, int initialCapacity)
objectFactory
- the factory to supply new objects on demandinitialCapacity
- the initial capacity to keep objects in the poolNullPointerException
- if objectFactory
is nullIllegalArgumentException
- if initialCapacity
is negativepublic ObjectPool(ObjectPool.ObjectFactory<K,V> objectFactory, int initialCapacity, int concurrencyLevel)
objectFactory
- the factory to supply new objects on demandinitialCapacity
- the initial capacity to keep objects in the poolconcurrencyLevel
- the estimated count of concurrently accessing threadsNullPointerException
- if objectFactory
is nullIllegalArgumentException
- if initialCapacity
is negative or
concurrencyLevel
is non-positivepublic void purge()
ReferenceQueue
, because
ReferenceQueue.poll
just checks a volatile instance variable in ReferenceQueue
.public abstract Reference<V> createReference(K key, V obj)
key
- the key to store in the referenceobj
- the object to associate withpublic abstract K getReferenceKey(Reference<V> ref)
ref
- The referencepublic V get(K key)
key
,
which is identified by the equals
method.NullPointerException
- if key
is nullCopyright © 2007–2020 The Apache Software Foundation. All rights reserved.