Package io.debezium.util
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>
Segments are specialized versions of hash tables. This
subclasses from ReentrantLock opportunistically, just to
simplify some locking and avoid separate construction.
-
Field Summary
Modifier and TypeFieldDescription(package private) int
The number of elements in this segment's region.(package private) final int
(package private) final BoundedConcurrentHashMap.EvictionPolicy<K,
V> (package private) final BoundedConcurrentHashMap.EvictionListener<K,
V> (package private) final float
The load factor for the hash table.(package private) int
Number of updates that alter the size of the table.private static final long
(package private) BoundedConcurrentHashMap.HashEntry<K,
V>[] The per-segment table.(package private) int
The table is rehashed when its size exceeds this threshold. -
Constructor Summary
ConstructorDescriptionSegment
(int cap, int evictCap, float lf, BoundedConcurrentHashMap.Eviction es, BoundedConcurrentHashMap.EvictionListener<K, V> listener) -
Method Summary
Modifier and TypeMethodDescriptionprivate Set<BoundedConcurrentHashMap.HashEntry<K,
V>> attemptEviction
(boolean lockedAlready) (package private) void
clear()
(package private) boolean
containsKey
(Object key, int hash) (package private) boolean
containsValue
(Object value) (package private) V
(package private) BoundedConcurrentHashMap.EvictionListener<K,
V> (package private) BoundedConcurrentHashMap.HashEntry<K,
V> getFirst
(int hash) Returns properly casted first entry of bin for given hash.(package private) static <K,
V> BoundedConcurrentHashMap.Segment<K, V>[] newArray
(int i) private void
(package private) V
(package private) V
Reads value field of an entry under lock.(package private) void
rehash()
(package private) V
Remove; match on key only if value null, else match both.(package private) V
(package private) boolean
(package private) void
setTable
(BoundedConcurrentHashMap.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
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
count
transient volatile int countThe number of elements in this segment's region. -
modCount
transient int modCountNumber 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 thresholdThe table is rehashed when its size exceeds this threshold. (The value of this field is always (int)(capacity * loadFactor).) -
table
The per-segment table. -
loadFactor
final float loadFactorThe 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
-
evictionListener
-
-
Constructor Details
-
Segment
Segment(int cap, int evictCap, float lf, BoundedConcurrentHashMap.Eviction es, BoundedConcurrentHashMap.EvictionListener<K, V> listener)
-
-
Method Details
-
newArray
-
getEvictionListener
BoundedConcurrentHashMap.EvictionListener<K,V> getEvictionListener() -
setTable
Sets table to new HashEntry array. Call only while holding lock or in constructor. -
getFirst
Returns properly casted first entry of bin for given hash. -
readValueUnderLock
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
-
containsKey
-
containsValue
-
replace
-
replace
-
put
-
rehash
void rehash() -
remove
Remove; match on key only if value null, else match both. -
clear
void clear() -
attemptEviction
-
notifyEvictionListener
-