Class BoundedConcurrentHashMap.Segment<K,V>

java.lang.Object
java.util.concurrent.locks.ReentrantLock
io.debezium.util.BoundedConcurrentHashMap.Segment<K,V>
All Implemented Interfaces:
Serializable, Lock
Enclosing class:
BoundedConcurrentHashMap<K,V>

static final class BoundedConcurrentHashMap.Segment<K,V> extends ReentrantLock
Segments are specialized versions of hash tables. This subclasses from ReentrantLock opportunistically, just to simplify some locking and avoid separate construction.
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • 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).)
    • table

      transient volatile BoundedConcurrentHashMap.HashEntry<K,V>[] table
      The per-segment table.
    • 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.
    • evictCap

      final int evictCap
    • eviction

      final transient BoundedConcurrentHashMap.EvictionPolicy<K,V> eviction
    • evictionListener

      final transient BoundedConcurrentHashMap.EvictionListener<K,V> evictionListener
  • Constructor Details

  • Method Details

    • newArray

      static <K, V> BoundedConcurrentHashMap.Segment<K,V>[] newArray(int i)
    • getEvictionListener

    • setTable

      void setTable(BoundedConcurrentHashMap.HashEntry<K,V>[] newTable)
      Sets table to new HashEntry array. Call only while holding lock or in constructor.
    • getFirst

      BoundedConcurrentHashMap.HashEntry<K,V> getFirst(int hash)
      Returns properly casted first entry of bin for given hash.
    • readValueUnderLock

      V readValueUnderLock(BoundedConcurrentHashMap.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(Object key, int hash)
    • containsKey

      boolean containsKey(Object key, int hash)
    • containsValue

      boolean containsValue(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

      void rehash()
    • remove

      V remove(Object key, int hash, Object value)
      Remove; match on key only if value null, else match both.
    • clear

      void clear()
    • attemptEviction

      private Set<BoundedConcurrentHashMap.HashEntry<K,V>> attemptEviction(boolean lockedAlready)
    • notifyEvictionListener

      private void notifyEvictionListener(Set<BoundedConcurrentHashMap.HashEntry<K,V>> evicted)