org.eclipse.net4j.util.ref
Class ReferenceValueMap<K,V>

java.lang.Object
  extended by java.util.AbstractMap<K,V>
      extended by org.eclipse.net4j.util.ref.ReferenceValueMap<K,V>
All Implemented Interfaces:
java.util.concurrent.ConcurrentMap<K,V>, java.util.Map<K,V>
Direct Known Subclasses:
ReferenceValueMap.Soft, ReferenceValueMap.Strong, ReferenceValueMap.Weak

public abstract class ReferenceValueMap<K,V>
extends java.util.AbstractMap<K,V>
implements java.util.concurrent.ConcurrentMap<K,V>

A ConcurrentMap implementation that uses KeyedReference instances (KeyedStrongReference, KeyedSoftReference, KeyedWeakReference or KeyedPhantomReference) as its values.

A ReferenceValueMap can be used to cache mappings until the value of the mapping is no longer reachable from outside of the map

Note: This map is not synchronized. If it is to be used by multiple threads concurrently the user is responsible for applying proper external synchronization!


Nested Class Summary
static class ReferenceValueMap.Soft<K,V>
           
static class ReferenceValueMap.Strong<K,V>
           
static class ReferenceValueMap.Weak<K,V>
           
 
Nested classes/interfaces inherited from interface java.util.Map
java.util.Map.Entry<K,V>
 
Constructor Summary
ReferenceValueMap()
           
ReferenceValueMap(java.util.concurrent.ConcurrentMap<K,KeyedReference<K,V>> map)
           
 
Method Summary
 void clear()
           
 boolean containsKey(java.lang.Object key)
           
 boolean containsValue(java.lang.Object value)
           
protected  java.lang.ref.ReferenceQueue<V> createQueue()
           
protected abstract  KeyedReference<K,V> createReference(K key, V value, java.lang.ref.ReferenceQueue<V> queue)
           
protected  V dereference(KeyedReference<K,V> ref)
           
 java.util.Set<java.util.Map.Entry<K,V>> entrySet()
           
 V get(java.lang.Object key)
           
 boolean isEmpty()
           
protected  void purged(K key)
           
protected  void purgeQueue()
           
 V put(K key, V value)
           
 V putIfAbsent(K key, V value)
           
 V remove(java.lang.Object key)
           
 boolean remove(java.lang.Object key, java.lang.Object value)
           
 V replace(K key, V value)
           
 boolean replace(K key, V oldValue, V newValue)
           
 int size()
           
 
Methods inherited from class java.util.AbstractMap
clone, equals, hashCode, keySet, putAll, toString, values
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.Map
equals, hashCode, keySet, putAll, values
 

Constructor Detail

ReferenceValueMap

public ReferenceValueMap()

ReferenceValueMap

public ReferenceValueMap(java.util.concurrent.ConcurrentMap<K,KeyedReference<K,V>> map)
Method Detail

size

public int size()
Specified by:
size in interface java.util.Map<K,V>
Overrides:
size in class java.util.AbstractMap<K,V>

isEmpty

public boolean isEmpty()
Specified by:
isEmpty in interface java.util.Map<K,V>
Overrides:
isEmpty in class java.util.AbstractMap<K,V>

containsKey

public boolean containsKey(java.lang.Object key)
Specified by:
containsKey in interface java.util.Map<K,V>
Overrides:
containsKey in class java.util.AbstractMap<K,V>

containsValue

public boolean containsValue(java.lang.Object value)
Specified by:
containsValue in interface java.util.Map<K,V>
Overrides:
containsValue in class java.util.AbstractMap<K,V>

get

public V get(java.lang.Object key)
Specified by:
get in interface java.util.Map<K,V>
Overrides:
get in class java.util.AbstractMap<K,V>

put

public V put(K key,
             V value)
Specified by:
put in interface java.util.Map<K,V>
Overrides:
put in class java.util.AbstractMap<K,V>

putIfAbsent

public V putIfAbsent(K key,
                     V value)
Specified by:
putIfAbsent in interface java.util.concurrent.ConcurrentMap<K,V>

replace

public V replace(K key,
                 V value)
Specified by:
replace in interface java.util.concurrent.ConcurrentMap<K,V>

replace

public boolean replace(K key,
                       V oldValue,
                       V newValue)
Specified by:
replace in interface java.util.concurrent.ConcurrentMap<K,V>

remove

public V remove(java.lang.Object key)
Specified by:
remove in interface java.util.Map<K,V>
Overrides:
remove in class java.util.AbstractMap<K,V>

remove

public boolean remove(java.lang.Object key,
                      java.lang.Object value)
Specified by:
remove in interface java.util.concurrent.ConcurrentMap<K,V>

clear

public void clear()
Specified by:
clear in interface java.util.Map<K,V>
Overrides:
clear in class java.util.AbstractMap<K,V>

entrySet

public java.util.Set<java.util.Map.Entry<K,V>> entrySet()
Specified by:
entrySet in interface java.util.Map<K,V>
Specified by:
entrySet in class java.util.AbstractMap<K,V>

createQueue

protected java.lang.ref.ReferenceQueue<V> createQueue()

purgeQueue

protected void purgeQueue()

purged

protected void purged(K key)

dereference

protected V dereference(KeyedReference<K,V> ref)

createReference

protected abstract KeyedReference<K,V> createReference(K key,
                                                       V value,
                                                       java.lang.ref.ReferenceQueue<V> queue)

Copyright (c) 2004 - 2008 Eike Stepper, Germany.
All Rights Reserved.