Interfaces and classes providing a framework for locking and waiting for conditions that is distinct from built-in synchronization and monitors. The framework permits much greater flexibility in the use of locks and conditions, at the expense of more awkward syntax.

The {@link java.util.concurrent.locks.Lock} interface supports locking disciplines that differ in semantics (reentrant, fair, etc), and that can be used in non-block-structured contexts including hand-over-hand and lock reordering algorithms. The main implementation is {@link java.util.concurrent.locks.ReentrantLock}.

The {@link java.util.concurrent.locks.ReadWriteLock} interface similarly defines locks that may be shared among readers but are exclusive to writers. Only a single implementation, {@link java.util.concurrent.locks.ReentrantReadWriteLock}, is provided, since it covers most standard usage contexts. But programmers may create their own implementations to cover nonstandard requirements.

The {@link java.util.concurrent.locks.Condition} interface describes the kinds of condition variables associated with monitors in other concurrent languages, as well as pthreads-style "condvars". Their support reduces the need for tricky and/or inefficient solutions to many classic concurrent problems. To avoid compatibility issues, the names of Condition methods are different than the corresponding Object versions.

The {@link java.util.concurrent.locks.LockSupport} class provides lower-level blocking and unblocking support that is useful only for those developers implementing their own customized lock classes.


Doug Lea
Last modified: Wed Aug 6 07:19:25 EDT 2003