Class ConcurrentWeakHashMap.Segment<K,​V>

  • All Implemented Interfaces:
    java.io.Serializable, java.util.concurrent.locks.Lock
    Enclosing class:
    ConcurrentWeakHashMap<K,​V>

    static final class ConcurrentWeakHashMap.Segment<K,​V>
    extends java.util.concurrent.locks.ReentrantLock
    implements java.io.Serializable
    Segments are specialized versions of hash tables. This subclasses from ReentrantLock opportunistically, just to simplify some locking and avoid separate construction.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      (package private) int count
      The number of elements in this segment's region.
      (package private) float loadFactor
      The load factor for the hash table.
      (package private) int modCount
      Number of updates that alter the size of the table.
      (package private) java.lang.ref.ReferenceQueue<K> refQueue
      The collected weak-key reference queue for this segment.
      private static long serialVersionUID  
      (package private) ConcurrentWeakHashMap.HashEntry<K,​V>[] table
      The per-segment table.
      (package private) int threshold
      The table is rehashed when its size exceeds this threshold.
    • Constructor Summary

      Constructors 
      Constructor Description
      Segment​(int initialCapacity, float lf)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      (package private) void clear()  
      (package private) boolean containsKey​(java.lang.Object key, int hash)  
      (package private) boolean containsValue​(java.lang.Object value)  
      (package private) V get​(java.lang.Object key, int hash)  
      (package private) ConcurrentWeakHashMap.HashEntry<K,​V> getFirst​(int hash)
      Returns properly casted first entry of bin for given hash.
      (package private) static <K,​V>
      ConcurrentWeakHashMap.Segment<K,​V>[]
      newArray​(int i)  
      (package private) V put​(K key, int hash, V value, boolean onlyIfAbsent)  
      (package private) V readValueUnderLock​(ConcurrentWeakHashMap.HashEntry<K,​V> e)
      Reads value field of an entry under lock.
      (package private) int rehash()  
      (package private) V remove​(java.lang.Object key, int hash, java.lang.Object value, boolean weakRemove)
      Remove; match on key only if value null, else match both.
      (package private) void removeStale()  
      (package private) V replace​(K key, int hash, V newValue)  
      (package private) boolean replace​(K key, int hash, V oldValue, V newValue)  
      (package private) void setTable​(ConcurrentWeakHashMap.HashEntry<K,​V>[] newTable)
      Sets table to new HashEntry array.
      • Methods inherited from class java.util.concurrent.locks.ReentrantLock

        getHoldCount, getOwner, getQueuedThreads, getQueueLength, getWaitingThreads, getWaitQueueLength, hasQueuedThread, hasQueuedThreads, hasWaiters, isFair, isHeldByCurrentThread, isLocked, lock, lockInterruptibly, newCondition, toString, tryLock, tryLock, unlock
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • count

        transient volatile int count
        The number of elements in this segment's region.
      • modCount

        transient int modCount
        Number of updates that alter the size of the table. This is used during bulk-read methods to make sure they see a consistent snapshot: If modCounts change during a traversal of segments computing size or checking containsValue, then we might have an inconsistent view of state so (usually) must retry.
      • threshold

        transient int threshold
        The table is rehashed when its size exceeds this threshold. (The value of this field is always (int)(capacity * loadFactor).)
      • loadFactor

        final float loadFactor
        The load factor for the hash table. Even though this value is same for all segments, it is replicated to avoid needing links to outer object.
      • refQueue

        transient volatile java.lang.ref.ReferenceQueue<K> refQueue
        The collected weak-key reference queue for this segment. This should be (re)initialized whenever table is assigned,
    • Constructor Detail

      • Segment

        Segment​(int initialCapacity,
                float lf)
    • Method Detail

      • readValueUnderLock

        V readValueUnderLock​(ConcurrentWeakHashMap.HashEntry<K,​V> e)
        Reads value field of an entry under lock. Called if value field ever appears to be null. This is possible only if a compiler happens to reorder a HashEntry initialization with its table assignment, which is legal under memory model but is not known to ever occur.
      • get

        V get​(java.lang.Object key,
              int hash)
      • containsKey

        boolean containsKey​(java.lang.Object key,
                            int hash)
      • containsValue

        boolean containsValue​(java.lang.Object value)
      • replace

        boolean replace​(K key,
                        int hash,
                        V oldValue,
                        V newValue)
      • replace

        V replace​(K key,
                  int hash,
                  V newValue)
      • put

        V put​(K key,
              int hash,
              V value,
              boolean onlyIfAbsent)
      • rehash

        int rehash()
      • remove

        V remove​(java.lang.Object key,
                 int hash,
                 java.lang.Object value,
                 boolean weakRemove)
        Remove; match on key only if value null, else match both.
      • removeStale

        void removeStale()
      • clear

        void clear()