Class SegmentedConcurrentMap.LockableEntry

java.lang.Object
com.tangosol.util.Base
com.tangosol.util.SegmentedHashMap.Entry
com.tangosol.util.SegmentedConcurrentMap.LockableEntry
All Implemented Interfaces:
Map.Entry
Enclosing class:
SegmentedConcurrentMap

public class SegmentedConcurrentMap.LockableEntry extends SegmentedHashMap.Entry
LockableEntry is an Entry that supports locking. See ConcurrentMap
  • Field Details

    • m_oLockHolder

      protected volatile Object m_oLockHolder
      The lock holder object.
    • m_cLock

      protected volatile short m_cLock
      The lock count (number of times the "lock()" was called by the locking thread).
    • m_cContend

      protected volatile short m_cContend
      The number of threads that are waiting to lock this Entry.
  • Constructor Details

    • LockableEntry

      protected LockableEntry(Object oKey, Object oValue, int nHash)
      Construct a LockableEntry for the given entry.
      Parameters:
      oKey - key with which the specified value is to be associated
      oValue - value to be associated with the specified key
      nHash - the hashCode for the specified key
  • Method Details

    • getLockHolder

      public Object getLockHolder()
      Return the holder of this lockable entry, or null if this entry is not locked.
      Returns:
      the lock holder, or null
    • getSource

      public SegmentedConcurrentMap getSource()
      Return the SegmentedConcurrentMap containing this Entry.
      Returns:
      SegmentedConcurrentMap containing this Entry
    • isContended

      public boolean isContended()
      Is there contention (a thread waiting) to lock this Entry?
      Returns:
      true iff another thread is contending for this Entry
    • setValueInternal

      protected Object setValueInternal(Object oValue)
      Replaces the value corresponding to this entry with the specified value (writes through to the map). The behavior of this call is undefined if the mapping has already been removed from the map.
      Overrides:
      setValueInternal in class SegmentedHashMap.Entry
      Parameters:
      oValue - new value to be stored in this entry
      Returns:
      old value corresponding to the entry, or NO_VALUE if the Entry was synthetic
    • isSynthetic

      protected boolean isSynthetic()
      Is this Entry synthetic?
      Overrides:
      isSynthetic in class SegmentedHashMap.Entry
      Returns:
      true iff this Entry is synthetic
    • waitForNotify

      protected long waitForNotify(long cWait, SegmentedConcurrentMap.ContentionObserver observer)
      Wait for this LockableEntry to be notified that it has been freed by the previous lock-holder. If the lock is being held by a thread and that thread has died, release the lock.

      Ensure the provided SegmentedConcurrentMap.ContentionObserver is called before and after this thread's wait for the lock-holder to release the lock.

      Parameters:
      cWait - the number of milliseconds to wait for notification to obtain a lock; pass zero to return immediately; pass -1 to block the calling thread until the lock obtained could be
      observer - a ContentionObserver, or null, to be invoked both before and after waiting for the lock-holder to release the lock
      Returns:
      updated wait time
    • waitForNotify

      protected long waitForNotify(long cWait)
      Wait for this LockableEntry to be notified that it has been freed by the previous lock-holder. If the lock is being held by a thread and that thread has died, release the lock.

      Note: caller of this method is expected to hold a synchronization monitor for this LockableEntry object while making this call.

      Parameters:
      cWait - the number of milliseconds to wait for notification to obtain a lock; pass zero to return immediately; pass -1 to block the calling thread until the lock could be obtained
      Returns:
      updated wait time
    • lock

      protected void lock(Object oHolder)
      Lock this entry for the specified lock holder.

      Note: caller of this method is expected to have locked the segment for this Entry object

      Parameters:
      oHolder - the holder of this lock
    • unlock

      protected boolean unlock()
      Unlock this entry.

      Note: caller of this method is expected to have locked the segment for this Entry object

      Returns:
      true iff the Entry is completely unlocked
    • casValueInternal

      protected boolean casValueInternal(Object oValueAssume, Object oValue)
      Set the value of this entry to the specified value iff the current value matches the assumed value.
      Parameters:
      oValueAssume - the assumed value
      oValue - the new value
      Returns:
      true iff the value changed
    • toString

      public String toString()
      Render the map entry as a String.
      Overrides:
      toString in class SegmentedHashMap.Entry
      Returns:
      the details about this entry
    • isLocked

      protected boolean isLocked()
      Is this entry Locked?
      Returns:
      true iff this entry is locked