Java in a Nutshell, 5th Edition [Electronic resources]

نسخه متنی -صفحه : 1191/ 829
نمايش فراداده

ReentrantLockjava.util.concurrent.locks

Java 5.0serializable

This class implements the Lock interface and adds instrumentation methods to determine what thread currently holds the lock, to return the number of threads waiting to acquire the lock or waiting on an associated Condition, and to test whether a specified thread is waiting to acquire the lock.

The name of this class includes the term "reentrant" because the thread that holds the lock can call any of the locking methods again, and they return immediately without blocking. isHeldByCurrentThread( ) tests whether the current thread already holds the lock. getHoldCount( ) returns the number of times that the current thread has acquired this lock. unlock( ) must be called this number of times before the lock is actually relinquished.

A "fair" lock may be created by passing true to the ReentrantLock( ) constructor. If you do this, the lock will always be granted to the thread that has been waiting for it the longest.

Figure 16-105. java.util.concurrent.locks.ReentrantLock

public class

ReentrantLock implements Lock, Serializable { // Public Constructors public

ReentrantLock ( ); public

ReentrantLock (boolean

fair ); // Public Instance Methods public int

getHoldCount ( ); default:0 public final int

getQueueLength ( ); default:0 public int

getWaitQueueLength (Condition

condition ); public final boolean

hasQueuedThread (Thread

thread ); public final boolean

hasQueuedThreads ( ); public boolean

hasWaiters (Condition

condition ); public final boolean

isFair ( ); default:false public boolean

isHeldByCurrentThread ( ); default:false public boolean

isLocked ( ); default:false // Methods Implementing Lock public void

lock ( ); public void

lockInterruptibly ( ) throws InterruptedException; public Condition

newCondition ( ); public boolean

tryLock ( ); public boolean

tryLock (long

timeout , java.util.concurrent.TimeUnit

unit ) throws InterruptedException; public void

unlock ( ); // Public Methods Overriding Object public String

toString ( ); // Protected Instance Methods protected Thread

getOwner ( ); protected java.util.Collection<Thread>

getQueuedThreads ( ); protected java.util.Collection<Thread>

getWaitingThreads (Condition

condition ); }