class AutoExpireMap<K,V>
extends java.lang.Object
Spezielle Map-implementierung, die dür die ID-Systemobjekt-Map im DafDataModel verwendet wird.
Im Gegensatz zu einer normalen Map bietet sie die Möglichkeit, Bestimmte Werte bei Bedarf durch eine WeakReference zu ersetzen (ggf. nach einem Timeout).
Außerdem verkleinert sich die Map automatisch (rehash) wenn die Kapazität der Map mehr als 3 mal so groß ist, wie die aktuelle Elementanzahl.
Diese Klasse ist Threadsafe.
Modifier and Type | Class and Description |
---|---|
private static class |
AutoExpireMap.MyReference
WeakReference-Implementierung, die sich den Key merkt
|
Modifier and Type | Field and Description |
---|---|
private java.util.concurrent.ConcurrentHashMap<K,java.lang.Object> |
_delegate |
private int |
_maxSize |
private java.lang.ref.ReferenceQueue<V> |
_queue |
private static java.util.Timer |
_timer |
Constructor and Description |
---|
AutoExpireMap() |
Modifier and Type | Method and Description |
---|---|
void |
clear()
Leert die Map
|
boolean |
containsKey(java.lang.Object key) |
void |
expire(K key,
V val,
long timeout)
Sorgt dafür, dass ein Eintrag nach einer Zeit durch eine WeakReference ersetzt wird
|
void |
expireNow(K key,
V val)
Sorgt dafür, dass ein Eintrag sofort durch eine WeakReference ersetzt wird
|
V |
get(java.lang.Object key) |
boolean |
isEmpty() |
java.util.Set<K> |
keySet()
Gibt alle Keys zurück.
|
V |
put(K key,
V value) |
private void |
rehash() |
V |
remove(java.lang.Object key)
Entfernt einen Eintrag sofort
|
int |
size() |
private V |
unpack(java.lang.Object ref)
Löst bei Bedarf WeakReferences auf, die gemischt mit normalen Objekten in der Map gespeichert sind
|
private void |
update()
Arbeitet die ReferenceQueue ab um abgeräumte Einträge zu entfernen, Triggert falls nötig einen rehash()
|
java.util.Collection<V> |
values()
Gibt eine Kopie der enthaltenen Werte zurück.
|
private java.util.concurrent.ConcurrentHashMap<K,java.lang.Object> _delegate
private java.lang.ref.ReferenceQueue<V> _queue
private static final java.util.Timer _timer
private int _maxSize
public void clear()
Leert die Map
public V remove(java.lang.Object key)
Entfernt einen Eintrag sofort
key
- Keyprivate V unpack(java.lang.Object ref)
Löst bei Bedarf WeakReferences auf, die gemischt mit normalen Objekten in der Map gespeichert sind
ref
- Objekt oder Weakreferencepublic V get(java.lang.Object key)
Map.get(Object)
public boolean containsKey(java.lang.Object key)
Map.containsKey(Object)
public boolean isEmpty()
Map.isEmpty()
public int size()
()
private void update()
Arbeitet die ReferenceQueue ab um abgeräumte Einträge zu entfernen, Triggert falls nötig einen rehash()
private void rehash()
public java.util.Set<K> keySet()
Gibt alle Keys zurück. Da die values durch WeakReferences referneziert werden können, gibt es möglicherweise nicht zu jedem key einen Wert.
public java.util.Collection<V> values()
Gibt eine Kopie der enthaltenen Werte zurück.
public void expire(K key, V val, long timeout)
Sorgt dafür, dass ein Eintrag nach einer Zeit durch eine WeakReference ersetzt wird
key
- Key des Eintragsval
- Wert des Eintrags (muss angegeben werden um sicherzustellen, dass nicht zwischenzeitlich der Wert geändert wurde und dann irrtümlich entfernt wird, vgl. compareAndSwap-Technik)timeout
- Anzahl Millisekunden, nach der der Eintrag ersetzt wird (> 0)public void expireNow(K key, V val)
Sorgt dafür, dass ein Eintrag sofort durch eine WeakReference ersetzt wird
key
- Key des Eintragsval
- Wert des Eintrags (muss angegeben werden um sicherzustellen, dass nicht zwischenzeitlich der Wert geändert wurde und dann irrtümlich entfernt wird, vgl. compareAndSwap-Technik)