Class ParallelRegion
- Direct Known Subclasses:
BornGradRegion
,BornRadiiRegion
,BulkSolventList
,ConnollyRegion
,DirectRegion
,DispersionRegion
,DistanceRegion
,EnergyRegion
,ExpandInducedDipolesRegion
,GKEnergyRegion
,GoldsteinPairRegion
,HydrophobicPMFRegion
,InducedDipoleFieldReduceRegion
,InducedDipoleFieldRegion
,InducedGKFieldRegion
,InitializationRegion
,InitializationRegion
,KillRegion
,NeighborList
,OPTRegion
,PermanentFieldRegion
,PermanentGKFieldRegion
,PolarizationEnergyRegion
,RealSpaceEnergyRegion
,ReciprocalEnergyRegion
,ReciprocalSpace.BSplineRegion
,ReduceRegion
,RowRegion
,SliceRegion
,SORRegion
,SpatialDensityRegion
,SurfaceAreaRegion
To execute a parallel region, create a ParallelTeam object;
create an instance of a concrete subclass of class ParallelRegion; and pass
this instance to the parallel team's execute()
method. You can do
all this using an anonymous inner class; for example:
new ParallelTeam().execute (new ParallelRegion() { // Shared variable declarations . . . public void start() { // Initialization code . . . } public void run() { // Thread private variable declarations // Parallel code . . . } public void finish() { // Finalization code . . . } });
The parallel team's execute()
method does the following. The
parallel team has a certain number of threads K, where K was
specified when the parallel team was constructed. The main thread is the
thread calling the parallel team's execute()
method. The main thread
calls the parallel region's start()
method. When the
start()
method returns, all the team threads call the parallel
region's run()
method concurrently. When all the team threads have
returned from the run()
method, the main thread calls the parallel
region's finish()
method. When the finish()
method returns,
the main thread returns from the parallel team's execute()
method.
Variables to be shared by all threads in the team may be declared as fields
of the ParallelRegion subclass. The start()
method is intended for
performing initialization in a single thread before parallel execution
begins. If no such initialization is needed, omit the start()
method. The run()
method contains code to be executed in parallel by
all threads in the team. Variables that are private to each thread may be
declared inside the run()
method. The finish()
method is
intended for performing finalization in a single thread after parallel
execution ends. If no such finalization is needed, omit the finish()
method.
If the parallel region's start()
method throws an exception, the
parallel team's execute()
method throws that same exception, and the
run()
method is not called.
If the parallel region's run()
method throws an exception in one of
the team threads, the exception's stack trace is printed on the standard
error, the parallel team waits until all the other team threads have returned
from the run()
method, then the parallel team's execute()
method throws that same exception, and the parallel region's
finish()
method is not called. If the parallel region's
run()
method throws an exception in more than one of the team
threads, each exception's stack trace is printed on the standard error, the
parallel team waits until all the other team threads have returned from the
run()
method, then the parallel team's execute()
method
throws a MultipleParallelException wrapping all the thrown
exceptions, and the parallel region's finish()
method is not called.
If the parallel region's finish()
method throws an exception, the
parallel team's execute()
method throws that same exception.
- Version:
- 11-Nov-2007
- Author:
- Alan Kaminsky
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionfinal void
barrier()
Perform a barrier.final void
barrier
(BarrierAction action) Perform a barrier, with a barrier action.final void
critical
(Lock theLock, ParallelSection theSection) Perform a section of code in a critical region with exclusive locking using the given lock.final void
critical
(ParallelSection theSection) Perform a section of code in a critical region with exclusive locking.final void
criticalNonexclusive
(Lock theLock, ParallelSection theSection) Perform a section of code in a critical region with nonexclusive locking using the given lock.final void
criticalNonexclusive
(ParallelSection theSection) Perform a section of code in a critical region with nonexclusive locking.final void
execute
(int first, int last, int stride, IntegerStrideForLoop theLoop) Execute a parallel for loop within this parallel region.final void
execute
(int first, int last, int stride, IntegerStrideForLoop theLoop, BarrierAction action) Execute a parallel for loop within this parallel region.final void
execute
(int first, int last, IntegerForLoop theLoop) Execute a parallel for loop within this parallel region.final void
execute
(int first, int last, IntegerForLoop theLoop, BarrierAction action) Execute a parallel for loop within this parallel region.final void
execute
(long first, long last, long stride, LongStrideForLoop theLoop) Execute a parallel for loop within this parallel region.final void
execute
(long first, long last, long stride, LongStrideForLoop theLoop, BarrierAction action) Execute a parallel for loop within this parallel region.final void
execute
(long first, long last, LongForLoop theLoop) Execute a parallel for loop within this parallel region.final void
execute
(long first, long last, LongForLoop theLoop, BarrierAction action) Execute a parallel for loop within this parallel region.final void
execute
(ParallelSection section) Execute a parallel section within this parallel region.final void
execute
(ParallelSection[] sections) Execute a group of parallel sections concurrently within this parallel region.final void
execute
(ParallelSection[] sections, BarrierAction action) Execute a group of parallel sections concurrently within this parallel region.final void
execute
(ParallelSection section, BarrierAction action) Execute a parallel section within this parallel region.final void
execute
(ParallelSection section1, ParallelSection section2) Execute a group of two parallel sections concurrently within this parallel region.final void
execute
(ParallelSection section1, ParallelSection section2, BarrierAction action) Execute a group of two parallel sections concurrently within this parallel region.final void
execute
(ParallelSection section1, ParallelSection section2, ParallelSection section3) Execute a group of three parallel sections concurrently within this parallel region.final void
execute
(ParallelSection section1, ParallelSection section2, ParallelSection section3, BarrierAction action) Execute a group of three parallel sections concurrently within this parallel region.final <T> void
execute
(Iterable<T> theIterable, ParallelIteration<T> theIteration) Execute a parallel iteration within this parallel region.final <T> void
execute
(Iterable<T> theIterable, ParallelIteration<T> theIteration, BarrierAction action) Execute a parallel iteration within this parallel region.final <T> void
execute
(Iterator<T> theIterator, ParallelIteration<T> theIteration) Execute a parallel iteration within this parallel region.final <T> void
execute
(Iterator<T> theIterator, ParallelIteration<T> theIteration, BarrierAction action) Execute a parallel iteration within this parallel region.final <T> void
execute
(T[] theArray, ParallelIteration<T> theIteration) Execute a parallel iteration within this parallel region.final <T> void
execute
(T[] theArray, ParallelIteration<T> theIteration, BarrierAction action) Execute a parallel iteration within this parallel region.void
finish()
Perform finalization actions after parallel execution ends.abstract void
run()
Execute parallel code.void
start()
Perform initialization actions before parallel execution begins.Methods inherited from class edu.rit.pj.ParallelConstruct
getThreadCount, getThreadIndex, isExecutingInParallel, region, team
-
Constructor Details
-
ParallelRegion
public ParallelRegion()Construct a new parallel region.
-
-
Method Details
-
start
Perform initialization actions before parallel execution begins. Only one thread calls thestart()
method.The
start()
method may be overridden in a subclass. If not overridden, thestart()
method does nothing. -
run
Execute parallel code. All threads of the parallel team call therun()
method concurrently.The
run()
method must be implemented in a subclass. -
finish
Perform finalization actions after parallel execution ends. Only one thread calls thefinish()
method.The
finish()
method may be overridden in a subclass. If not overridden, thefinish()
method does nothing. -
execute
Execute a parallel for loop within this parallel region. For further information, see class IntegerForLoop. The loop index goes fromfirst
(inclusive) tolast
(inclusive) in steps of +1. Iffirst
is greater thanlast
, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
first
- First loop index.last
- Last loop index.theLoop
- Parallel for loop.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheLoop
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheLoop
's methods throws an exception.Exception
- if any.
-
execute
public final void execute(int first, int last, IntegerForLoop theLoop, BarrierAction action) throws Exception Execute a parallel for loop within this parallel region. For further information, see class IntegerForLoop. The loop index goes fromfirst
(inclusive) tolast
(inclusive) in steps of +1. Iffirst
is greater thanlast
, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
first
- First loop index.last
- Last loop index.theLoop
- Parallel for loop.action
- Barrier action.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheLoop
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheLoop
's methods throws an exception.Exception
- if any.
-
execute
public final void execute(int first, int last, int stride, IntegerStrideForLoop theLoop) throws Exception Execute a parallel for loop within this parallel region. For further information, see class IntegerStrideForLoop. The loop index goes fromfirst
(inclusive) tolast
(inclusive) in steps ofstride
. The stride must be positive. Iffirst
is greater thanlast
, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
first
- First loop index.last
- Last loop index.stride
- Loop index stride, >= 1.theLoop
- Parallel for loop.- Throws:
IllegalArgumentException
- (unchecked exception) Thrown ifstride
< 1.NullPointerException
- (unchecked exception) Thrown iftheLoop
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheLoop
's methods throws an exception.Exception
- if any.
-
execute
public final void execute(int first, int last, int stride, IntegerStrideForLoop theLoop, BarrierAction action) throws Exception Execute a parallel for loop within this parallel region. For further information, see class IntegerStrideForLoop. The loop index goes fromfirst
(inclusive) tolast
(inclusive) in steps ofstride
. The stride must be positive. Iffirst
is greater thanlast
, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
first
- First loop index.last
- Last loop index.stride
- Loop index stride, >= 1.theLoop
- Parallel for loop.action
- Barrier action.- Throws:
IllegalArgumentException
- (unchecked exception) Thrown ifstride
< 1.NullPointerException
- (unchecked exception) Thrown iftheLoop
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheLoop
's methods throws an exception.Exception
- if any.
-
execute
Execute a parallel for loop within this parallel region. For further information, see class LongForLoop. The loop index goes fromfirst
(inclusive) tolast
(inclusive) in steps of +1. Iffirst
is greater thanlast
, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
first
- First loop index.last
- Last loop index.theLoop
- Parallel for loop.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheLoop
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheLoop
's methods throws an exception.Exception
- if any.
-
execute
public final void execute(long first, long last, LongForLoop theLoop, BarrierAction action) throws Exception Execute a parallel for loop within this parallel region. For further information, see class LongForLoop. The loop index goes fromfirst
(inclusive) tolast
(inclusive) in steps of +1. Iffirst
is greater thanlast
, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
first
- First loop index.last
- Last loop index.theLoop
- Parallel for loop.action
- Barrier action.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheLoop
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheLoop
's methods throws an exception.Exception
- if any.
-
execute
public final void execute(long first, long last, long stride, LongStrideForLoop theLoop) throws Exception Execute a parallel for loop within this parallel region. For further information, see class LongStrideForLoop. The loop index goes fromfirst
(inclusive) tolast
(inclusive) in steps ofstride
. The stride must be positive. Iffirst
is greater thanlast
, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
first
- First loop index.last
- Last loop index.stride
- Loop index stride, >= 1.theLoop
- Parallel for loop.- Throws:
IllegalArgumentException
- (unchecked exception) Thrown ifstride
< 1.NullPointerException
- (unchecked exception) Thrown iftheLoop
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheLoop
's methods throws an exception.Exception
- if any.
-
execute
public final void execute(long first, long last, long stride, LongStrideForLoop theLoop, BarrierAction action) throws Exception Execute a parallel for loop within this parallel region. For further information, see class LongStrideForLoop. The loop index goes fromfirst
(inclusive) tolast
(inclusive) in steps ofstride
. The stride must be positive. Iffirst
is greater thanlast
, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
first
- First loop index.last
- Last loop index.stride
- Loop index stride, >= 1.theLoop
- Parallel for loop.action
- Barrier action.- Throws:
IllegalArgumentException
- (unchecked exception) Thrown ifstride
< 1.NullPointerException
- (unchecked exception) Thrown iftheLoop
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheLoop
's methods throws an exception.Exception
- if any.
-
execute
Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the elements of the given array. The iteration order is from index 0 upwards. At the end of the parallel iteration, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Type Parameters:
T
- Data type of the items iterated over.- Parameters:
theArray
- Array containing the items.theIteration
- Parallel iteration.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheArray
is null ortheIteration
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheIteration
's methods throws an exception.Exception
- if any.
-
execute
public final <T> void execute(T[] theArray, ParallelIteration<T> theIteration, BarrierAction action) throws Exception Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the elements of the given array. The iteration order is from index 0 upwards. At the end of the parallel iteration, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Type Parameters:
T
- Data type of the items iterated over.- Parameters:
theArray
- Array containing the items.theIteration
- Parallel iteration.action
- Barrier action.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheArray
is null. Thrown iftheIteration
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheIteration
's methods throws an exception.Exception
- if any.
-
execute
public final <T> void execute(Iterator<T> theIterator, ParallelIteration<T> theIteration) throws Exception Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the items returned by the given iterator. The iteration order is that of the given iterator. At the end of the parallel iteration, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Type Parameters:
T
- Data type of the items iterated over.- Parameters:
theIterator
- Iterator over the items.theIteration
- Parallel iteration.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheIterator
is null ortheIteration
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheIteration
's methods throws an exception.Exception
- if any.
-
execute
public final <T> void execute(Iterator<T> theIterator, ParallelIteration<T> theIteration, BarrierAction action) throws Exception Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the items returned by the given iterator. The iteration order is that of the given iterator. At the end of the parallel iteration, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Type Parameters:
T
- Data type of the items iterated over.- Parameters:
theIterator
- Iterator over the items.theIteration
- Parallel iteration.action
- Barrier action.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheIterator
is null. Thrown iftheIteration
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheIteration
's methods throws an exception.Exception
- if any.
-
execute
public final <T> void execute(Iterable<T> theIterable, ParallelIteration<T> theIteration) throws Exception Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the items contained in the given iterable collection. The iteration order is that of the given iterable collection's iterator. At the end of the parallel iteration, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Type Parameters:
T
- Data type of the items iterated over.- Parameters:
theIterable
- Iterable collection containing the items.theIteration
- Parallel iteration.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheIterable
is null ortheIteration
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheIteration
's methods throws an exception.Exception
- if any.
-
execute
public final <T> void execute(Iterable<T> theIterable, ParallelIteration<T> theIteration, BarrierAction action) throws Exception Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the items contained in the given iterable collection. The iteration order is that of the given iterable collection's iterator. At the end of the parallel iteration, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Type Parameters:
T
- Data type of the items iterated over.- Parameters:
theIterable
- Iterable collection containing the items.theIteration
- Parallel iteration.action
- Barrier action.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheIterable
is null. Thrown iftheIteration
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one oftheIteration
's methods throws an exception.Exception
- if any.
-
execute
Execute a parallel section within this parallel region. The parallel section'srun()
method is called by one of the parallel team threads. For further information, see class ParallelSection. At the end of the parallel section, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
section
- Parallel section.- Throws:
NullPointerException
- (unchecked exception) Thrown ifsection
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if the parallel section'srun()
method throws an exception.Exception
- if any.
-
execute
Execute a parallel section within this parallel region. The parallel section'srun()
method is called by one of the parallel team threads. For further information, see class ParallelSection. At the end of the parallel section, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
section
- Parallel section.action
- Barrier action.- Throws:
NullPointerException
- (unchecked exception) Thrown ifsection
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if the parallel section'srun()
method throws an exception.Exception
- if any.
-
execute
Execute a group of two parallel sections concurrently within this parallel region. Each parallel section'srun()
method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
section1
- First parallel section.section2
- Second parallel section.- Throws:
NullPointerException
- (unchecked exception) Thrown ifsection1
is null. Thrown ifsection2
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one of the parallel sections'run()
methods throws an exception.Exception
- if any.
-
execute
public final void execute(ParallelSection section1, ParallelSection section2, BarrierAction action) throws Exception Execute a group of two parallel sections concurrently within this parallel region. Each parallel section'srun()
method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
section1
- First parallel section.section2
- Second parallel section.action
- Barrier action.- Throws:
NullPointerException
- (unchecked exception) Thrown ifsection1
is null. Thrown ifsection2
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one of the parallel sections'run()
methods throws an exception.Exception
- if any.
-
execute
public final void execute(ParallelSection section1, ParallelSection section2, ParallelSection section3) throws Exception Execute a group of three parallel sections concurrently within this parallel region. Each parallel section'srun()
method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
section1
- First parallel section.section2
- Second parallel section.section3
- Third parallel section.- Throws:
NullPointerException
- (unchecked exception) Thrown ifsection1
is null. Thrown ifsection2
is null. Thrown ifsection3
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one of the parallel sections'run()
methods throws an exception.Exception
- if any.
-
execute
public final void execute(ParallelSection section1, ParallelSection section2, ParallelSection section3, BarrierAction action) throws Exception Execute a group of three parallel sections concurrently within this parallel region. Each parallel section'srun()
method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
section1
- First parallel section.section2
- Second parallel section.section3
- Third parallel section.action
- Barrier action.- Throws:
NullPointerException
- (unchecked exception) Thrown ifsection1
is null. Thrown ifsection2
is null. Thrown ifsection3
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one of the parallel sections'run()
methods throws an exception.Exception
- if any.
-
execute
Execute a group of parallel sections concurrently within this parallel region. Each parallel section'srun()
method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
sections
- Parallel sections.- Throws:
NullPointerException
- (unchecked exception) Thrown if any of thesections
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one of the parallel sections'run()
methods throws an exception.Exception
- if any.
-
execute
Execute a group of parallel sections concurrently within this parallel region. Each parallel section'srun()
method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
execute()
method with identical arguments, or none of the threads must call theexecute()
method.- Parameters:
sections
- Parallel sections.action
- Barrier action.- Throws:
NullPointerException
- (unchecked exception) Thrown if any of thesections
is null. Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown if one of the parallel sections'run()
methods throws an exception.Exception
- if any.
-
critical
Perform a section of code in a critical region with exclusive locking. The locking is performed using the default lock, a hidden Lock variable shared by all the parallel team threads. The thread calling thecritical()
method waits until no other thread is executing a critical region with exclusive locking using the default lock and no other thread is executing a critical region with nonexclusive locking using the default lock. The thread then callstheSection
'srun()
method with exclusive locking using the default lock. When therun()
method returns, the thread unlocks the lock and returns from thecritical()
method.If the parallel section's
run()
method throws an exception, thecritical()
method throws that same exception in the thread that called therun()
method (after unlocking the lock).- Parameters:
theSection
- Parallel section to execute in the critical region.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheSection
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown iftheSection
'srun()
method throws an exception.Exception
- if any.
-
criticalNonexclusive
Perform a section of code in a critical region with nonexclusive locking. The locking is performed using the default lock, a hidden Lock variable shared by all the parallel team threads. The thread calling thecritical()
method waits until no other thread is executing a critical region with exclusive locking using the default lock. However, any number of other threads may be executing a critical region with nonexclusive locking using the default lock. The thread then callstheSection
'srun()
method with nonexclusive locking using the default lock. When therun()
method returns, the thread unlocks the lock and returns from thecritical()
method.If the parallel section's
run()
method throws an exception, thecritical()
method throws that same exception in the thread that called therun()
method (after unlocking the lock).- Parameters:
theSection
- Parallel section to execute in the critical region.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheSection
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown iftheSection
'srun()
method throws an exception.Exception
- if any.
-
critical
Perform a section of code in a critical region with exclusive locking using the given lock. The thread calling thecritical()
method waits until no other thread is executing a critical region with exclusive locking using the given lock and no other thread is executing a critical region with nonexclusive locking using the given lock. The thread then callstheSection
'srun()
method with exclusive locking using the given lock. When therun()
method returns, the thread unlocks the lock and returns from thecritical()
method.If the parallel section's
run()
method throws an exception, thecritical()
method throws that same exception in the thread that called therun()
method (after unlocking the lock).- Parameters:
theLock
- Lock.theSection
- Parallel section to execute in the critical region.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheLock
is null ortheSection
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown iftheSection
'srun()
method throws an exception.Exception
- if any.
-
criticalNonexclusive
Perform a section of code in a critical region with nonexclusive locking using the given lock. The thread calling thecritical()
method waits until no other thread is executing a critical region with exclusive locking using the given lock. However, any number of other threads may be executing a critical region with nonexclusive locking using the given lock. The thread then callstheSection
'srun()
method with nonexclusive locking using the given lock. When therun()
method returns, the thread unlocks the lock and returns from thecritical()
method.If the parallel section's
run()
method throws an exception, thecritical()
method throws that same exception in the thread that called therun()
method (after unlocking the lock).- Parameters:
theLock
- Lock.theSection
- Parallel section to execute in the critical region.- Throws:
NullPointerException
- (unchecked exception) Thrown iftheLock
is null ortheSection
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown iftheSection
'srun()
method throws an exception.Exception
- if any.
-
barrier
public final void barrier()Perform a barrier. The parallel team threads wait for each other at a barrier.Note: Either all threads in the parallel team must call the
barrier()
method, or none of the threads must call thebarrier()
method.- Throws:
IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.
-
barrier
Perform a barrier, with a barrier action. The parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.Note: Either all threads in the parallel team must call the
barrier()
method, or none of the threads must call thebarrier()
method.- Parameters:
action
- Barrier action.- Throws:
NullPointerException
- (unchecked exception) Thrown ifaction
is null.IllegalStateException
- (unchecked exception) Thrown if no parallel team is executing this parallel region.Exception
- Thrown iftheSection
'srun()
method throws an exception.Exception
- if any.
-