|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.opensymphony.xwork2.inject.util.ReferenceMap<K,V>
public class ReferenceMap<K,V>
Concurrent hash map that wraps keys and/or values in soft or weak references. Does not support null keys or values. Uses identity equality for weak and soft keys.
The concurrent semantics of ConcurrentHashMap
combined with the
fact that the garbage collector can asynchronously reclaim and clean up
after keys and values at any time can lead to some racy semantics. For
example, size()
returns an upper bound on the size, i.e. the actual
size may be smaller in cases where the key or value has been reclaimed but
the map entry has not been cleaned up yet.
Another example: If get(Object)
cannot find an existing entry
for a key, it will try to create one. This operation is not atomic. One
thread could put(Object, Object)
a value between the time another
thread running get()
checks for an entry and decides to create one.
In this case, the newly created value will replace the put value in the
map. Also, two threads running get()
concurrently can potentially
create duplicate values for a given key.
In other words, this class is great for caching but not atomicity.
Nested Class Summary | |
---|---|
(package private) class |
ReferenceMap.Entry
|
(package private) static interface |
ReferenceMap.InternalReference
Marker interface to differentiate external and internal references. |
(package private) static class |
ReferenceMap.KeyReferenceAwareWrapper
Used for keys. |
private static class |
ReferenceMap.PutStrategy
|
(package private) static class |
ReferenceMap.ReferenceAwareWrapper
Big hack. |
(package private) class |
ReferenceMap.SoftKeyReference
|
(package private) class |
ReferenceMap.SoftValueReference
|
protected static interface |
ReferenceMap.Strategy
|
(package private) class |
ReferenceMap.WeakKeyReference
|
(package private) class |
ReferenceMap.WeakValueReference
|
Field Summary | |
---|---|
private static ReferenceMap.PutStrategy |
defaultPutStrategy
|
(package private) ConcurrentMap<Object,Object> |
delegate
|
(package private) ReferenceType |
keyReferenceType
|
private static long |
serialVersionUID
|
(package private) ReferenceType |
valueReferenceType
|
Constructor Summary | |
---|---|
ReferenceMap(ReferenceType keyReferenceType,
ReferenceType valueReferenceType)
Concurrent hash map that wraps keys and/or values based on specified reference types. |
Method Summary | ||
---|---|---|
void |
clear()
|
|
boolean |
containsKey(Object key)
|
|
boolean |
containsValue(Object value)
|
|
(package private) Object |
dereference(ReferenceType referenceType,
Object reference)
Returns the refererent for reference given its reference type. |
|
(package private)
|
dereferenceCollection(ReferenceType referenceType,
T in,
T out)
Dereferences elements in in using
referenceType and puts them in out . |
|
(package private) ReferenceMap.Entry |
dereferenceEntry(Map.Entry<Object,Object> entry)
Dereferences an entry. |
|
(package private) K |
dereferenceKey(Object o)
Converts a reference to a key. |
|
(package private) Set<K> |
dereferenceKeySet(Set keyReferences)
Dereferences a set of key references. |
|
(package private) V |
dereferenceValue(Object o)
Converts a reference to a value. |
|
(package private) Collection<V> |
dereferenceValues(Collection valueReferences)
Dereferences a collection of value references. |
|
(package private) static void |
ensureNotNull(Object... array)
|
|
(package private) static void |
ensureNotNull(Object o)
|
|
Set<Map.Entry<K,V>> |
entrySet()
Returns an unmodifiable set view of the entries in this map. |
|
(package private) V |
execute(ReferenceMap.Strategy strategy,
K key,
V value)
|
|
V |
get(Object key)
|
|
protected ReferenceMap.PutStrategy |
getPutStrategy()
|
|
(package private) V |
internalGet(K key)
|
|
boolean |
isEmpty()
|
|
(package private) static int |
keyHashCode(Object key)
|
|
Set<K> |
keySet()
Returns an unmodifiable set view of the keys in this map. |
|
(package private) Object |
makeKeyReferenceAware(Object o)
Wraps key so it can be compared to a referenced key for equality. |
|
(package private) Object |
makeValueReferenceAware(Object o)
Wraps value so it can be compared to a referenced value for equality. |
|
V |
put(K key,
V value)
|
|
void |
putAll(Map<? extends K,? extends V> t)
|
|
V |
putIfAbsent(K key,
V value)
|
|
protected ReferenceMap.Strategy |
putIfAbsentStrategy()
|
|
protected ReferenceMap.Strategy |
putStrategy()
|
|
private void |
readObject(ObjectInputStream in)
|
|
(package private) static boolean |
referenceEquals(Reference r,
Object o)
Tests weak and soft references for identity equality. |
|
(package private) Object |
referenceKey(K key)
Creates a reference for a key. |
|
(package private) Object |
referenceValue(Object keyReference,
Object value)
Creates a reference for a value. |
|
V |
remove(Object key)
|
|
boolean |
remove(Object key,
Object value)
|
|
V |
replace(K key,
V value)
|
|
boolean |
replace(K key,
V oldValue,
V newValue)
|
|
protected ReferenceMap.Strategy |
replaceStrategy()
|
|
int |
size()
|
|
Collection<V> |
values()
Returns an unmodifiable set view of the values in this map. |
|
private void |
writeObject(ObjectOutputStream out)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface java.util.Map |
---|
equals, hashCode |
Field Detail |
---|
private static final long serialVersionUID
transient ConcurrentMap<Object,Object> delegate
final ReferenceType keyReferenceType
final ReferenceType valueReferenceType
private static ReferenceMap.PutStrategy defaultPutStrategy
Constructor Detail |
---|
public ReferenceMap(ReferenceType keyReferenceType, ReferenceType valueReferenceType)
keyReferenceType
- key reference typevalueReferenceType
- value reference typeMethod Detail |
---|
V internalGet(K key)
public V get(Object key)
get
in interface Map<K,V>
V execute(ReferenceMap.Strategy strategy, K key, V value)
public V put(K key, V value)
put
in interface Map<K,V>
public V remove(Object key)
remove
in interface Map<K,V>
public int size()
size
in interface Map<K,V>
public boolean isEmpty()
isEmpty
in interface Map<K,V>
public boolean containsKey(Object key)
containsKey
in interface Map<K,V>
public boolean containsValue(Object value)
containsValue
in interface Map<K,V>
public void putAll(Map<? extends K,? extends V> t)
putAll
in interface Map<K,V>
public void clear()
clear
in interface Map<K,V>
public Set<K> keySet()
keySet
in interface Map<K,V>
public Collection<V> values()
values
in interface Map<K,V>
public V putIfAbsent(K key, V value)
public boolean remove(Object key, Object value)
public boolean replace(K key, V oldValue, V newValue)
public V replace(K key, V value)
public Set<Map.Entry<K,V>> entrySet()
entrySet
in interface Map<K,V>
ReferenceMap.Entry dereferenceEntry(Map.Entry<Object,Object> entry)
Object referenceKey(K key)
K dereferenceKey(Object o)
V dereferenceValue(Object o)
Object dereference(ReferenceType referenceType, Object reference)
Object referenceValue(Object keyReference, Object value)
Set<K> dereferenceKeySet(Set keyReferences)
Collection<V> dereferenceValues(Collection valueReferences)
Object makeKeyReferenceAware(Object o)
Object makeValueReferenceAware(Object o)
<T extends Collection<Object>> T dereferenceCollection(ReferenceType referenceType, T in, T out)
in
using
referenceType
and puts them in out
. Returns
out
.
static int keyHashCode(Object key)
static boolean referenceEquals(Reference r, Object o)
protected ReferenceMap.Strategy putStrategy()
protected ReferenceMap.Strategy putIfAbsentStrategy()
protected ReferenceMap.Strategy replaceStrategy()
protected ReferenceMap.PutStrategy getPutStrategy()
static void ensureNotNull(Object o)
static void ensureNotNull(Object... array)
private void writeObject(ObjectOutputStream out) throws IOException
IOException
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
IOException
ClassNotFoundException
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |