org.codehaus.gpars

groovyx.gpars.group
[Java] Class PGroup

java.lang.Object
  groovyx.gpars.group.PGroup

@java.lang.SuppressWarnings* Creates a group for actors, agents, tasks and operators. The actors will share a common daemon thread pool.
public abstract class PGroup

Provides a common super class of pooled parallel groups.

Authors:
Vaclav Pech, Alex Tkachman Date: May 8, 2009


Field Summary
protected static java.lang.String A_SPLITTER_NEEDS_AN_INPUT_CHANNEL_AND_AT_LEAST_ONE_OUTPUT_CHANNEL_TO_BE_CREATED

private Pool threadPool

 
Constructor Summary
protected PGroup(Pool threadPool)

 
Method Summary
DefaultActor actor(java.lang.Runnable handler)

Creates a new instance of BlockingActor, using the passed-in closure as the body of the actor's act() method.

Agent agent(java.lang.Object state)

Creates an agent instance initialized with the given state

Agent agent(java.lang.Object state, groovy.lang.Closure copy)

Creates an agent instance initialized with the given state, which will cooperate in thread sharing with other agents and actors in a fair manner.

BlockingActor blockingActor(java.lang.Runnable handler)

Creates a new instance of DefaultActor, using the passed-in runnable/closure as the body of the actor's act() method.

void execute(java.lang.Runnable task)

DefaultActor fairActor(java.lang.Runnable handler)

Agent fairAgent(java.lang.Object state)

Creates an agent instance initialized with the given state, which will cooperate in thread sharing with other agents and actors in a fair manner.

Agent fairAgent(java.lang.Object state, groovy.lang.Closure copy)

Creates a new task assigned to a thread from the current parallel group.

Actor fairMessageHandler(groovy.lang.Closure code)

Creates an instance of StaticDispatchActor.

Actor fairReactor(groovy.lang.Closure code)

Creates an instance of DynamicDispatchActor.

Actor fairStaticMessageHandler(groovy.lang.Closure code)

protected void finalize()

int getPoolSize()

Gently stops the pool

Pool getThreadPool()

private static boolean isListAccepting(groovy.lang.Closure code)

Promise lazyTask(groovy.lang.Closure code)

Creates a new task assigned to a thread from the current parallel group.

Promise lazyTask(java.util.concurrent.Callable callable)

Actor messageHandler(groovy.lang.Closure code)

Creates an instance of DynamicDispatchActor, which will cooperate in thread sharing with other actors sharing the same thread pool

DataflowProcessor operator(java.util.Map channels, groovy.lang.Closure code)

Creates an operator using the current parallel group

DataflowProcessor operator(java.util.List inputChannels, java.util.List outputChannels, groovy.lang.Closure code)

Creates an operator using the current parallel group

DataflowProcessor operator(java.util.List inputChannels, java.util.List outputChannels, int maxForks, groovy.lang.Closure code)

Creates an operator using the current parallel group

DataflowProcessor operator(DataflowReadChannel input, DataflowWriteChannel output, groovy.lang.Closure code)

Creates an operator using the current parallel group

DataflowProcessor operator(DataflowReadChannel input, DataflowWriteChannel output, int maxForks, groovy.lang.Closure code)

Creates a selector using this parallel group

DataflowProcessor prioritySelector(java.util.Map channels, groovy.lang.Closure code)

Creates a prioritizing selector using the default dataflow parallel group Input with lower position index have higher priority.

DataflowProcessor prioritySelector(java.util.List inputChannels, java.util.List outputChannels, groovy.lang.Closure code)

Creates a prioritizing selector using the default dataflow parallel group.

DataflowProcessor prioritySelector(java.util.Map channels)

Creates a prioritizing selector using the default dataflow parallel group.

DataflowProcessor prioritySelector(java.util.List inputChannels, java.util.List outputChannels)

Creates a splitter copying its single input channel into all of its output channels.

Actor reactor(groovy.lang.Closure code)

Creates a reactor around the supplied code, which will cooperate in thread sharing with other actors sharing the same thread pool When a reactor receives a message, the supplied block of code is run with the message as a parameter and the result of the code is send in reply.

void resetDefaultSize()

void resize(int poolSize)

Sets the pool size to the default

Select select(SelectableChannel... channels)

Creates a select using the current parallel group.

Select select(java.util.List channels)

DataflowProcessor selector(java.util.Map channels, groovy.lang.Closure code)

Creates a selector using this parallel group

DataflowProcessor selector(java.util.List inputChannels, java.util.List outputChannels, groovy.lang.Closure code)

Creates a selector using this parallel group.

DataflowProcessor selector(java.util.Map channels)

Creates a selector using this parallel group.

DataflowProcessor selector(java.util.List inputChannels, java.util.List outputChannels)

Creates a prioritizing selector using the default dataflow parallel group Input with lower position index have higher priority.

private boolean shallHandle(groovy.lang.Closure errorHandler, java.lang.Throwable e)

Shutdown the thread pool gracefully

void shutdown()

DataflowProcessor splitter(DataflowReadChannel inputChannel, java.util.List outputChannels)

DataflowProcessor splitter(DataflowReadChannel inputChannel, java.util.List outputChannels, int maxForks)

Creates a select using the current parallel group.

Actor staticMessageHandler(groovy.lang.Closure code)

Promise task(groovy.lang.Closure code)

Promise task(java.util.concurrent.Callable callable)

Promise task(java.lang.Runnable code)

Creates a new task assigned to a thread from the current parallel group.

Promise whenAllBound(java.util.List promises, groovy.lang.Closure code)

Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.

Promise whenAllBound(Promise promise1, groovy.lang.Closure code)

Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.

Promise whenAllBound(Promise promise1, Promise promise2, groovy.lang.Closure code)

Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.

Promise whenAllBound(Promise promise1, Promise promise2, Promise promise3, groovy.lang.Closure code)

Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.

Promise whenAllBound(Promise promise1, Promise promise2, Promise promise3, Promise promise4, groovy.lang.Closure code)

Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.

Promise whenAllBound(java.util.List promises, groovy.lang.Closure code, groovy.lang.Closure errorHandler)

Promise whenAllBound(Promise promise1, groovy.lang.Closure code, groovy.lang.Closure errorHandler)

Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.

Promise whenAllBound(Promise promise1, Promise promise2, groovy.lang.Closure code, groovy.lang.Closure errorHandler)

Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.

Promise whenAllBound(Promise promise1, Promise promise2, Promise promise3, groovy.lang.Closure code, groovy.lang.Closure errorHandler)

Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.

Promise whenAllBound(Promise promise1, Promise promise2, Promise promise3, Promise promise4, groovy.lang.Closure code, groovy.lang.Closure errorHandler)

Waits for the promise identified by the index to be bound and then passes on to the next promise in the list

private void whenAllBound(java.util.List promises, int index, java.util.List values, DataflowVariable result, groovy.lang.Closure code, groovy.lang.Closure errorHandler)

 
Methods inherited from class java.lang.Object
java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
 

Field Detail

A_SPLITTER_NEEDS_AN_INPUT_CHANNEL_AND_AT_LEAST_ONE_OUTPUT_CHANNEL_TO_BE_CREATED

protected static final java.lang.String A_SPLITTER_NEEDS_AN_INPUT_CHANNEL_AND_AT_LEAST_ONE_OUTPUT_CHANNEL_TO_BE_CREATED


threadPool

private final Pool threadPool


 
Constructor Detail

PGroup

protected PGroup(Pool threadPool)


 
Method Detail

actor

public final DefaultActor actor(@groovy.lang.DelegatesTonew RunnableBackedBlockingActor(h java.lang.Runnable handler)
Creates a new instance of BlockingActor, using the passed-in closure as the body of the actor's act() method. The created actor will be part of the default actor group.
Parameters:
handler - The body of the newly created actor's act method.
Returns:
A newly created instance of the BlockingActor class


agent

public final Agent agent(java.lang.Object state)
Creates an agent instance initialized with the given state
Parameters:
state - The initial internal state of the new Agent instance
Returns:
The created instance


agent

public final Agent agent(java.lang.Object state, groovy.lang.Closure copy)
Creates an agent instance initialized with the given state, which will cooperate in thread sharing with other agents and actors in a fair manner.
Parameters:
state - The initial internal state of the new Agent instance
Returns:
The created instance


blockingActor

public final BlockingActor blockingActor(@groovy.lang.DelegatesTogatesTo(DefaultActor.class) final java.lang.Runnable handler)
Creates a new instance of DefaultActor, using the passed-in runnable/closure as the body of the actor's act() method. The actor will cooperate in thread sharing with other actors sharing the same thread pool in a fair manner. The created actor will belong to the pooled parallel group.
Parameters:
handler - The body of the newly created actor's act method.
Returns:
A newly created instance of the DefaultActor class


execute

public void execute(java.lang.Runnable task)


fairActor

public final DefaultActor fairActor(@groovy.lang.DelegatesTo java.lang.Runnable handler)


fairAgent

public final Agent fairAgent(java.lang.Object state)
Creates an agent instance initialized with the given state, which will cooperate in thread sharing with other agents and actors in a fair manner.
Parameters:
copy - A closure to use to create a copy of the internal state when sending the internal state out
state - The initial internal state of the new Agent instance
Returns:
The created instance


fairAgent

public final Agent fairAgent(java.lang.Object state, groovy.lang.Closure copy)
Creates a new task assigned to a thread from the current parallel group. Tasks are a lightweight version of dataflow operators, which do not define their communication channels explicitly, but can only exchange data using explicit DataflowVariables and Streams. Registers itself with Dataflow for nested 'whenBound' handlers to use the same group.
Parameters:
code - The task body to run
Returns:
A DataflowVariable, which gets assigned the value returned from the supplied code


fairMessageHandler

public final Actor fairMessageHandler(@groovy.lang.DelegatesToactor = new StaticDispatch groovy.lang.Closure code)
Creates an instance of StaticDispatchActor.
Parameters:
code - The closure specifying the only statically dispatched message handler.
Returns:
The new started actor


fairReactor

public final Actor fairReactor(@groovy.lang.DelegatesToactor = new DynamicDispatc groovy.lang.Closure code)
Creates an instance of DynamicDispatchActor.
Parameters:
code - The closure specifying individual message handlers.
Returns:
The new started actor


fairStaticMessageHandler

public final Actor fairStaticMessageHandler(@groovy.lang.DelegatesTo groovy.lang.Closure code)


finalize

@java.lang.SuppressWarnings/**
@java.lang.Override* Sets the pool size to the default
protected void finalize()


getPoolSize

public int getPoolSize()
Gently stops the pool


getThreadPool

public Pool getThreadPool()


isListAccepting

private static boolean isListAccepting(groovy.lang.Closure code)


lazyTask

public final Promise lazyTask(groovy.lang.Closure code)
Creates a new task assigned to a thread from the current parallel group. The task is lazy, since it only gets executed if the returned Promise instance is read or a then-callback is registered on it. Tasks are a lightweight version of dataflow operators, which do not define their communication channels explicitly, but can only exchange data using explicit DataflowVariables and Streams. Registers itself with Dataflow for nested 'whenBound' handlers to use the same group.
Parameters:
code - The task body to run
Returns:
A LazyDataflowVariable, which gets assigned the value returned from the supplied code


lazyTask

public final Promise lazyTask(java.util.concurrent.Callable callable)


messageHandler

public final Actor messageHandler(@groovy.lang.DelegatesTo groovy.lang.Closure code)
Creates an instance of DynamicDispatchActor, which will cooperate in thread sharing with other actors sharing the same thread pool
Parameters:
code - The closure specifying individual message handlers.
Returns:
The new started actor


operator

public final DataflowProcessor operator(java.util.Map channels, @groovy.lang.DelegatesTo groovy.lang.Closure code)
Creates an operator using the current parallel group
Parameters:
channels - A map specifying "inputs" and "outputs" - dataflow channels (instances of the DataflowQueue or DataflowVariable classes) to use for inputs and outputs
code - The operator's body to run each time all inputs have a value to read
Returns:
A new started operator instance with all the channels set


operator

public final DataflowProcessor operator(java.util.List inputChannels, java.util.List outputChannels, @groovy.lang.DelegatesTofinal int maxForks, (Data groovy.lang.Closure code)
Creates an operator using the current parallel group
Parameters:
inputChannels - dataflow channels to use for input
outputChannels - dataflow channels to use for output
maxForks - Number of parallel threads running operator's body, defaults to 1
code - The operator's body to run each time all inputs have a value to read
Returns:
A new started operator instance with all the channels set


operator

public final DataflowProcessor operator(java.util.List inputChannels, java.util.List outputChannels, int maxForks, @groovy.lang.DelegatesTogatesTo(DataflowOperator.class) final groovy.lang.Closure code)
Creates an operator using the current parallel group
Parameters:
input - a dataflow channel to use for input
output - a dataflow channel to use for output
code - The operator's body to run each time all inputs have a value to read
Returns:
A new started operator instance with all the channels set


operator

public final DataflowProcessor operator(DataflowReadChannel input, DataflowWriteChannel output, @groovy.lang.DelegatesTofinal int maxForks, (Data groovy.lang.Closure code)
Creates an operator using the current parallel group
Parameters:
input - a dataflow channel to use for input
output - a dataflow channel to use for output
maxForks - Number of parallel threads running operator's body, defaults to 1
code - The operator's body to run each time all inputs have a value to read
Returns:
A new started operator instance with all the channels set


operator

public final DataflowProcessor operator(DataflowReadChannel input, DataflowWriteChannel output, int maxForks, @groovy.lang.DelegatesTo groovy.lang.Closure code)
Creates a selector using this parallel group
Parameters:
channels - A map specifying "inputs" and "outputs" - dataflow channels (instances of the DataflowQueue or DataflowVariable classes) to use for inputs and outputs
code - The selector's body to run each time a value is available in any of the inputs channels
Returns:
A new started selector instance with all the channels set


prioritySelector

public final DataflowProcessor prioritySelector(java.util.Map channels, @groovy.lang.DelegatesTo groovy.lang.Closure code)
Creates a prioritizing selector using the default dataflow parallel group Input with lower position index have higher priority.
Parameters:
inputChannels - dataflow channels to use for input
outputChannels - dataflow channels to use for output
code - The selector's body to run each time a value is available in any of the inputs channels
Returns:
A new started selector instance with all the channels set


prioritySelector

public final DataflowProcessor prioritySelector(java.util.List inputChannels, java.util.List outputChannels, @groovy.lang.DelegatesTo groovy.lang.Closure code)
Creates a prioritizing selector using the default dataflow parallel group. Since no body is provided, the selector will simply copy the incoming values to all output channels. Input with lower position index have higher priority.
Parameters:
channels - A map specifying "inputs" and "outputs" - dataflow channels (instances of the DataflowQueue or DataflowVariable classes) to use for inputs and outputs
Returns:
A new started selector instance with all the channels set


prioritySelector

public final DataflowProcessor prioritySelector(java.util.Map channels)
Creates a prioritizing selector using the default dataflow parallel group. Since no body is provided, the selector will simply copy the incoming values to all output channels. Input with lower position index have higher priority.
Parameters:
inputChannels - dataflow channels to use for input
outputChannels - dataflow channels to use for output
Returns:
A new started selector instance with all the channels set


prioritySelector

public final DataflowProcessor prioritySelector(java.util.List inputChannels, java.util.List outputChannels)
Creates a splitter copying its single input channel into all of its output channels. The created splitter will be part of this parallel group
Parameters:
inputChannel - The channel to read values from
outputChannels - A list of channels to output to
Returns:
A new started splitter instance with all the channels set


reactor

public final Actor reactor(@groovy.lang.DelegatesTotor((Actor.cla groovy.lang.Closure code)
Creates a reactor around the supplied code, which will cooperate in thread sharing with other actors sharing the same thread pool When a reactor receives a message, the supplied block of code is run with the message as a parameter and the result of the code is send in reply.
Parameters:
code - The code to invoke for each received message
Returns:
A new instance of ReactiveEventBasedThread


resetDefaultSize

public void resetDefaultSize()


resize

public void resize(int poolSize)
Sets the pool size to the default


select

public final Select select(SelectableChannel... channels)
Creates a select using the current parallel group. The returns Select instance will allow the user to obtain values from the supplied dataflow variables or streams as they become available.
Parameters:
channels - Dataflow variables or streams to wait for values on


select

public final Select select(java.util.List channels)


selector

public final DataflowProcessor selector(java.util.Map channels, @groovy.lang.DelegatesTo groovy.lang.Closure code)
Creates a selector using this parallel group
Parameters:
inputChannels - dataflow channels to use for input
outputChannels - dataflow channels to use for output
code - The selector's body to run each time a value is available in any of the inputs channels
Returns:
A new started selector instance with all the channels set


selector

public final DataflowProcessor selector(java.util.List inputChannels, java.util.List outputChannels, @groovy.lang.DelegatesTo groovy.lang.Closure code)
Creates a selector using this parallel group. Since no body is provided, the selector will simply copy the incoming values to all output channels.
Parameters:
channels - A map specifying "inputs" and "outputs" - dataflow channels (instances of the DataflowQueue or DataflowVariable classes) to use for inputs and outputs
Returns:
A new started selector instance with all the channels set


selector

public final DataflowProcessor selector(java.util.Map channels)
Creates a selector using this parallel group. Since no body is provided, the selector will simply copy the incoming values to all output channels.
Parameters:
inputChannels - dataflow channels to use for input
outputChannels - dataflow channels to use for output
Returns:
A new started selector instance with all the channels set


selector

public final DataflowProcessor selector(java.util.List inputChannels, java.util.List outputChannels)
Creates a prioritizing selector using the default dataflow parallel group Input with lower position index have higher priority.
Parameters:
channels - A map specifying "inputs" and "outputs" - dataflow channels (instances of the DataflowQueue or DataflowVariable classes) to use for inputs and outputs
code - The selector's body to run each time a value is available in any of the inputs channels
Returns:
A new started selector instance with all the channels set


shallHandle

private boolean shallHandle(groovy.lang.Closure errorHandler, java.lang.Throwable e)
Shutdown the thread pool gracefully


shutdown

public void shutdown()


splitter

public final DataflowProcessor splitter(DataflowReadChannel inputChannel, java.util.List outputChannels)


splitter

public final DataflowProcessor splitter(DataflowReadChannel inputChannel, java.util.List outputChannels, int maxForks)
Creates a select using the current parallel group. The returns Select instance will allow the user to obtain values from the supplied dataflow variables or streams as they become available.
Parameters:
channels - Dataflow variables or streams to wait for values on


staticMessageHandler

public final Actor staticMessageHandler(@groovy.lang.DelegatesToActor, which will cooperat groovy.lang.Closure code)


task

public final Promise task(groovy.lang.Closure code)


task

public final Promise task(java.util.concurrent.Callable callable)


task

public final Promise task(java.lang.Runnable code)
Creates a new task assigned to a thread from the current parallel group. Tasks are a lightweight version of dataflow operators, which do not define their communication channels explicitly, but can only exchange data using explicit DataflowVariables and Streams. Registers itself with Dataflow for nested 'whenBound' handlers to use the same group.
Parameters:
code - The task body to run
Returns:
A DataflowVariable, which gets bound to null once the supplied code finishes


whenAllBound

public final Promise whenAllBound(java.util.List promises, groovy.lang.Closure code)
Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.
Parameters:
promise1 - The promises to wait for
code - A closure to execute with concrete values for each of the supplied promises
- The type of the final result
Returns:
A promise for the final result


whenAllBound

public final Promise whenAllBound(Promise promise1, groovy.lang.Closure code)
Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.
Parameters:
promise1 - The promises to wait for
promise2 - The promises to wait for
code - A closure to execute with concrete values for each of the supplied promises
- The type of the final result
Returns:
A promise for the final result


whenAllBound

public final Promise whenAllBound(Promise promise1, Promise promise2, groovy.lang.Closure code)
Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.
Parameters:
promise1 - The promises to wait for
promise2 - The promises to wait for
promise3 - The promises to wait for
code - A closure to execute with concrete values for each of the supplied promises
- The type of the final result
Returns:
A promise for the final result


whenAllBound

public final Promise whenAllBound(Promise promise1, Promise promise2, Promise promise3, groovy.lang.Closure code)
Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.
Parameters:
promise1 - The promises to wait for
promise2 - The promises to wait for
promise3 - The promises to wait for
promise4 - The promises to wait for
code - A closure to execute with concrete values for each of the supplied promises
- The type of the final result
Returns:
A promise for the final result


whenAllBound

public final Promise whenAllBound(Promise promise1, Promise promise2, Promise promise3, Promise promise4, groovy.lang.Closure code)
Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.
Parameters:
promises - The promises to wait for
code - A closure to execute with concrete values for each of the supplied promises
errorHandler - A closure handling an exception (an instance of Throwable), if it gets bound
- The type of the final result
Returns:
A promise for the final result


whenAllBound

public final Promise whenAllBound(java.util.List promises, groovy.lang.Closure code, groovy.lang.Closure errorHandler)


whenAllBound

public final Promise whenAllBound(Promise promise1, groovy.lang.Closure code, groovy.lang.Closure errorHandler)
Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.
Parameters:
promise1 - The promises to wait for
promise2 - The promises to wait for
code - A closure to execute with concrete values for each of the supplied promises
errorHandler - A closure handling an exception (an instance of Throwable), if if it gets bound
- The type of the final result
Returns:
A promise for the final result


whenAllBound

public final Promise whenAllBound(Promise promise1, Promise promise2, groovy.lang.Closure code, groovy.lang.Closure errorHandler)
Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.
Parameters:
promise1 - The promises to wait for
promise2 - The promises to wait for
promise3 - The promises to wait for
code - A closure to execute with concrete values for each of the supplied promises
errorHandler - A closure handling an exception (an instance of Throwable), if if it gets bound
- The type of the final result
Returns:
A promise for the final result


whenAllBound

public final Promise whenAllBound(Promise promise1, Promise promise2, Promise promise3, groovy.lang.Closure code, groovy.lang.Closure errorHandler)
Without blocking the thread waits for all the promises to get bound and then passes them to the supplied closure.
Parameters:
promise1 - The promises to wait for
promise2 - The promises to wait for
promise3 - The promises to wait for
promise4 - The promises to wait for
code - A closure to execute with concrete values for each of the supplied promises
errorHandler - A closure handling an exception (an instance of Throwable), if if it gets bound
- The type of the final result
Returns:
A promise for the final result


whenAllBound

public final Promise whenAllBound(Promise promise1, Promise promise2, Promise promise3, Promise promise4, groovy.lang.Closure code, groovy.lang.Closure errorHandler)
Waits for the promise identified by the index to be bound and then passes on to the next promise in the list
Parameters:
promises - A list of all promises that need to be waited for
index - The index of the current promise to wait for
values - A list of values the so-far processed promises were bound tpo
result - The promise for the final result of the calculation
code - The calculation to execute on the values once they are all bound
- The type of the final result


whenAllBound

private void whenAllBound(java.util.List promises, int index, java.util.List values, DataflowVariable result, groovy.lang.Closure code, groovy.lang.Closure errorHandler)


 

Copyright © 2008–2013 Václav Pech. All Rights Reserved.