Class WeakConcurrentMap<K,V>

java.lang.Object
java.lang.ref.ReferenceQueue<K>
cn.nukkit.utils.collection.WeakConcurrentMap<K,V>
All Implemented Interfaces:
Iterable<Map.Entry<K,V>>, Runnable
Direct Known Subclasses:
WeakConcurrentMap.WithInlinedExpunction

public class WeakConcurrentMap<K,V> extends ReferenceQueue<K> implements Runnable, Iterable<Map.Entry<K,V>>

A thread-safe map with weak keys. Entries are based on a key's system hash code and keys are considered equal only by reference equality.

This class does not implement the Map interface because this implementation is incompatible with the map contract. While iterating over a map's entries, any key that has not passed iteration is referenced non-weakly.
  • Field Details

  • Constructor Details

    • WeakConcurrentMap

      public WeakConcurrentMap(boolean cleanerThread)
      Parameters:
      cleanerThread - true if a thread should be started that removes stale entries.
  • Method Details

    • get

      public V get(K key)
      Parameters:
      key - The key of the entry.
      Returns:
      The value of the entry or the default value if it did not exist.
    • containsKey

      public boolean containsKey(K key)
      Parameters:
      key - The key of the entry.
      Returns:
      true if the key already defines a value.
    • put

      public V put(K key, V value)
      Parameters:
      key - The key of the entry.
      value - The value of the entry.
      Returns:
      The previous entry or null if it does not exist.
    • remove

      public V remove(K key)
      Parameters:
      key - The key of the entry.
      Returns:
      The removed entry or null if it does not exist.
    • clear

      public void clear()
      Clears the entire map.
    • defaultValue

      protected V defaultValue(K key)
      Creates a default value. There is no guarantee that the requested value will be set as a once it is created in case that another thread requests a value for a key concurrently.
      Parameters:
      key - The key for which to create a default value.
      Returns:
      The default value for a key without value or null for not defining a default value.
    • getCleanerThread

      public Thread getCleanerThread()
      Returns:
      The cleaner thread or null if no such thread was set.
    • expungeStaleEntries

      public void expungeStaleEntries()
      Cleans all unused references.
    • approximateSize

      public int approximateSize()
      Returns the approximate size of this map where the returned number is at least as big as the actual number of entries.
      Returns:
      The minimum size of this map.
    • clearDeadReferences

      public void clearDeadReferences()
    • run

      public void run()
      Specified by:
      run in interface Runnable
    • iterator

      public Iterator<Map.Entry<K,V>> iterator()
      Specified by:
      iterator in interface Iterable<K>