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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access