Name
CyclicBarrier
Synopsis
This
class
synchronizes a group of n
threads, where
n
is specified to the
CyclicBarrier( )
constructor. Threads call the
await( )
method, which blocks until
n
threads are waiting. In the simple case,
all n
threads are then allowed to proceed,
and the CyclicBarrier
resets itself until it has
another n
threads blocked in
await( )
.
More complex behavior is possible if you pass a
Runnable
object to the
CyclicBarrier
constructor. This
Runnable
is a “barrier
action” and when the last of the
n
threads invokes await(
)
, that method uses the thread to invoke the run(
)
method of the Runnable
. This
Runnable
is typically used to perform some sort of
coordinating action on the blocked threads. When the run(
)
method returns, the CyclicBarrier
allows all blocked threads to resume.
When threads resume from await( )
, the return
value of await( )
is an integer that represents
the order in which they called await( )
. This is
useful if you want to be able to distinguish between otherwise
identical worker threads. For example, you might have the thread that
arrived first perform some special action while the remaining threads
resume.
If any thread times out or is interrupted while blocked in
await( )
, the CyclicBarrier
is
said to be “broken,” and all
waiting threads (and any threads that subsequently call
await( )
) wake up with a
BrokenBarrierException
. Waiting threads also
receive a BrokenBarrierException
if the
CyclicBarrier
is reset( )
. The
reset( )
method is the only way ...
Get Java in a Nutshell, 5th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.