|
org.codehaus.gpars | |||||||
FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectgroovyx.gpars.serial.WithSerialId
groovyx.gpars.actor.impl.MessageStream
groovyx.gpars.actor.Actor
groovyx.gpars.actor.impl.ReplyingMessageStream
groovyx.gpars.actor.impl.SequentialProcessingActor
@Deprecated @SuppressWarnings({"UnqualifiedStaticUsage"}) class SequentialProcessingActor extends ReplyingMessageStream
Nested Class Summary | |
---|---|
class |
SequentialProcessingActor.MultiMessageReaction
Enables multiple argument closures to be passed to react(). |
class |
SequentialProcessingActor.Node
Represents an element in the message queue. |
class |
SequentialProcessingActor.Reaction
Buffers messages for the next continuation of an event-driven actor, handles timeouts and no-param continuations. |
Field Summary | |
---|---|
private static java.lang.String |
ERROR_EVALUATING_LOOP_CONDITION
|
private static java.lang.String |
SHOULD_NOT_REACH_HERE
|
protected static int |
S_ACTIVE_MASK
|
protected static int |
S_FINISHED_MASK
|
protected static int |
S_FINISHING_MASK
|
protected static int |
S_NOT_STARTED
|
protected static int |
S_RUNNING
|
protected static int |
S_STOPPED
|
protected static int |
S_STOPPING
|
protected static int |
S_STOP_TERMINATE_MASK
|
protected static int |
S_TERMINATED
|
protected static int |
S_TERMINATING
|
protected groovy.lang.Closure |
afterLoopCode
|
private int |
count
Counter of messages in the queues |
private static java.util.concurrent.atomic.AtomicIntegerFieldUpdater |
countUpdater
|
private SequentialProcessingActor.Node |
inputQueue
Stored incoming messages. |
private static java.util.concurrent.atomic.AtomicReferenceFieldUpdater |
inputQueueUpdater
|
protected java.lang.Runnable |
loopCode
Code for the loop, if any |
protected java.util.concurrent.Callable |
loopCondition
|
private static ActorMessage |
loopMessage
|
private java.util.concurrent.atomic.AtomicBoolean |
ongoingThreadTermination
|
private SequentialProcessingActor.Node |
outputQueue
Stores messages ready for processing by the actor. |
private SequentialProcessingActor.Reaction |
reaction
Code for the next action |
private static long |
serialVersionUID
|
private static ActorMessage |
startMessage
|
protected int |
stopFlag
Indicates whether the actor should terminate |
protected static java.util.concurrent.atomic.AtomicIntegerFieldUpdater |
stopFlagUpdater
|
private java.lang.Thread |
waitingThread
|
Fields inherited from class ReplyingMessageStream | |
---|---|
obj2Sender |
Fields inherited from class Actor | |
---|---|
ACTOR_HAS_ALREADY_BEEN_STARTED, START_MESSAGE, STOP_MESSAGE, TERMINATE_MESSAGE, TIMEOUT_MESSAGE, currentThread, parallelGroup, timer |
Constructor Summary | |
protected SequentialProcessingActor()
Creates a new instance, sets the default actor group. |
Method Summary | |
---|---|
private ActorMessage
|
awaitNextMessage(long endTime)
Holds common functionality for takeMessage() methods. |
protected void
|
checkStopTerminate()
|
private void
|
doLoopCall()
|
private ActorMessage
|
getMessage()
Retrieves the next message from the queue |
protected void
|
handleTermination()
|
protected boolean
|
hasBeenStopped()
|
boolean
|
isActive()
Checks the current status of the Actor. |
protected void
|
loop(java.lang.Runnable code)
Ensures that the supplied closure will be invoked repeatedly in a loop. |
protected void
|
loop(int numberOfLoops, java.lang.Runnable code)
Ensures that the supplied closure will be invoked repeatedly in a loop. |
protected void
|
loop(int numberOfLoops, groovy.lang.Closure afterLoopCode, java.lang.Runnable code)
Ensures that the supplied closure will be invoked repeatedly in a loop. |
protected void
|
loop(groovy.lang.Closure condition, java.lang.Runnable code)
Ensures that the supplied closure will be invoked repeatedly in a loop. |
protected void
|
loop(groovy.lang.Closure condition, groovy.lang.Closure afterLoopCode, java.lang.Runnable code)
Ensures that the supplied closure will be invoked repeatedly in a loop. |
private void
|
loop(java.util.concurrent.Callable condition, groovy.lang.Closure afterLoopCode, java.lang.Runnable code)
Ensures that the supplied closure will be invoked repeatedly in a loop. |
protected ActorMessage
|
pollMessage()
Polls a message from the queues |
protected void
|
react(groovy.time.Duration duration, groovy.lang.Closure code)
Schedules an ActorAction to take the next message off the message queue and to pass it on to the supplied closure. |
protected void
|
react(groovy.lang.Closure code)
Schedules an ActorAction to take the next message off the message queue and to pass it on to the supplied closure. |
protected void
|
react(long timeout, java.util.concurrent.TimeUnit timeUnit, groovy.lang.Closure code)
Schedules an ActorAction to take the next message off the message queue and to pass it on to the supplied closure. |
protected void
|
react(long timeout, groovy.lang.Closure code)
Schedules an ActorAction to take the next message off the message queue and to pass it on to the supplied closure. |
protected java.lang.Object
|
receive()
Retrieves a message from the message queue, waiting, if necessary, for a message to arrive. |
protected java.lang.Object
|
receive(long timeout, java.util.concurrent.TimeUnit units)
Retrieves a message from the message queue, waiting, if necessary, for a message to arrive. |
protected java.lang.Object
|
receive(groovy.time.BaseDuration duration)
Retrieves a message from the message queue, waiting, if necessary, for a message to arrive. |
protected java.lang.Object
|
receiveImpl()
Retrieves a message from the message queue, waiting, if necessary, for a message to arrive. |
protected java.lang.Object
|
receiveImpl(long timeout, java.util.concurrent.TimeUnit units)
Retrieves a message from the message queue, waiting, if necessary, for a message to arrive. |
private ActorMessage
|
retrieveNextMessage()
Takes the next message from the outputQueue, decrements the counter and possibly throws control exceptions |
void
|
run()
|
void
|
runReaction(ActorMessage message, groovy.lang.Closure code)
|
private void
|
schedule()
Schedules the current actor for processing on the actor group's thread pool. |
protected void
|
scheduleLoop()
|
MessageStream
|
send(java.lang.Object message)
|
void
|
setParallelGroup(PGroup group)
Sets the actor's group. |
Actor
|
silentStart()
|
SequentialProcessingActor
|
start()
Starts the Actor. |
Actor
|
stop()
Send message to stop to the actor. |
protected ActorMessage
|
sweepNextMessage()
Removes the head of the message queue |
protected ActorMessage
|
takeMessage()
Takes a message from the queues. |
protected ActorMessage
|
takeMessage(long timeout, java.util.concurrent.TimeUnit timeUnit)
Takes a message from the queues. |
Actor
|
terminate()
Terminate the Actor. |
private void
|
throwIfNeeded(ActorMessage toProcess)
Checks the supplied message and throws either STOP or TERMINATE, if the message is a Stop or Terminate message respectively. |
private void
|
transferQueues()
Transfers messages from the input queue into the output queue, reverting the order of the elements. |
private static java.lang.Object
|
unwrapMessage(java.lang.Object msg)
|
private static boolean
|
verifyLoopCondition(java.util.concurrent.Callable condition)
|
Methods inherited from class ReplyingMessageStream | |
---|---|
getSender, getSenders, reply, replyIfExists, runEnhancedWithRepliesOnMessages |
Methods inherited from class MessageStream | |
---|---|
call, getRemoteClass, leftShift, reInterrupt, send, send, send, sendAndWait, sendAndWait, sendAndWait |
Methods inherited from class WithSerialId | |
---|---|
createRemoteHandle, getOrCreateSerialHandle, getRemoteClass, writeReplace |
Field Detail |
---|
private static final java.lang.String ERROR_EVALUATING_LOOP_CONDITION
private static final java.lang.String SHOULD_NOT_REACH_HERE
protected static final int S_ACTIVE_MASK
protected static final int S_FINISHED_MASK
protected static final int S_FINISHING_MASK
protected static final int S_NOT_STARTED
protected static final int S_RUNNING
protected static final int S_STOPPED
protected static final int S_STOPPING
protected static final int S_STOP_TERMINATE_MASK
protected static final int S_TERMINATED
protected static final int S_TERMINATING
protected groovy.lang.Closure afterLoopCode
@SuppressWarnings({"UnusedDeclaration"}) //modified through countUpdater private int count
private static final java.util.concurrent.atomic.AtomicIntegerFieldUpdater countUpdater
@SuppressWarnings({"UnusedDeclaration"}) //modified through inputQueryUpdater private SequentialProcessingActor.Node inputQueue
private static final java.util.concurrent.atomic.AtomicReferenceFieldUpdater inputQueueUpdater
protected java.lang.Runnable loopCode
protected java.util.concurrent.Callable loopCondition
private static final ActorMessage loopMessage
private final java.util.concurrent.atomic.AtomicBoolean ongoingThreadTermination
private SequentialProcessingActor.Node outputQueue
private SequentialProcessingActor.Reaction reaction
private static final long serialVersionUID
private static final ActorMessage startMessage
protected int stopFlag
protected static final java.util.concurrent.atomic.AtomicIntegerFieldUpdater stopFlagUpdater
private java.lang.Thread waitingThread
Constructor Detail |
---|
protected SequentialProcessingActor()
Method Detail |
---|
private ActorMessage awaitNextMessage(long endTime)
endTime
- End of the timeout, 0 if no timeout was set
protected final void checkStopTerminate()
private void doLoopCall()
private ActorMessage getMessage()
@Override protected void handleTermination()
@Override protected final boolean hasBeenStopped()
@Override public final boolean isActive()
protected final void loop(java.lang.Runnable code)
code
- The closure to invoke repeatedly
protected final void loop(int numberOfLoops, java.lang.Runnable code)
numberOfLoops
- The loop will only be run the given number of timescode
- The closure to invoke repeatedly
protected final void loop(int numberOfLoops, groovy.lang.Closure afterLoopCode, java.lang.Runnable code)
numberOfLoops
- The loop will only be run the given number of timesafterLoopCode
- Code to run after the main actor's loop finishescode
- The closure to invoke repeatedly
protected final void loop(groovy.lang.Closure condition, java.lang.Runnable code)
condition
- A condition to evaluate before each iteration starts. If the condition returns false, the loop exits.code
- The closure to invoke repeatedly
protected final void loop(groovy.lang.Closure condition, groovy.lang.Closure afterLoopCode, java.lang.Runnable code)
condition
- A condition to evaluate before each iteration starts. If the condition returns false, the loop exits.afterLoopCode
- Code to run after the main actor's loop finishescode
- The closure to invoke repeatedly
private void loop(java.util.concurrent.Callable condition, groovy.lang.Closure afterLoopCode, java.lang.Runnable code)
condition
- A condition to evaluate before each iteration starts. If the condition returns false, the loop exits.afterLoopCode
- Code to run after the main actor's loop finishescode
- The closure to invoke repeatedly
protected final ActorMessage pollMessage()
protected final void react(groovy.time.Duration duration, groovy.lang.Closure code)
duration
- Time to wait at most for a message to arrive. The actor terminates if a message doesn't arrive within the given timeout.
The TimeCategory DSL to specify timeouts must be enabled explicitly inside the Actor's act() method.code
- The code to handle the next message. The reply() and replyIfExists() methods are available inside
the closure to send a reply back to the actor, which sent the original message.
protected final void react(groovy.lang.Closure code)
code
- The code to handle the next message. The reply() and replyIfExists() methods are available inside
the closure to send a reply back to the actor, which sent the original message.
protected final void react(long timeout, java.util.concurrent.TimeUnit timeUnit, groovy.lang.Closure code)
timeout
- Time in milliseconds to wait at most for a message to arrive. The actor terminates if a message doesn't arrive within the given timeout.timeUnit
- a TimeUnit determining how to interpret the timeout parametercode
- The code to handle the next message. The reply() and replyIfExists() methods are available inside
the closure to send a reply back to the actor, which sent the original message.
protected final void react(long timeout, groovy.lang.Closure code)
timeout
- Time in milliseconds to wait at most for a message to arrive. The actor terminates if a message doesn't arrive within the given timeout.code
- The code to handle the next message. The reply() and replyIfExists() methods are available inside
the closure to send a reply back to the actor, which sent the original message.
protected final java.lang.Object receive()
protected final java.lang.Object receive(long timeout, java.util.concurrent.TimeUnit units)
timeout
- how long to wait before giving up, in units of unitunits
- a TimeUnit determining how to interpret the timeout parameter
protected final java.lang.Object receive(groovy.time.BaseDuration duration)
duration
- how long to wait before giving up, in units of unit
protected java.lang.Object receiveImpl()
protected java.lang.Object receiveImpl(long timeout, java.util.concurrent.TimeUnit units)
timeout
- how long to wait before giving up, in units of unitunits
- a TimeUnit determining how to interpret the timeout parameter
private ActorMessage retrieveNextMessage()
@Override @SuppressWarnings({"ThrowCaughtLocally", "OverlyLongMethod"}) public void run()
public final void runReaction(ActorMessage message, groovy.lang.Closure code)
private void schedule()
protected void scheduleLoop()
@Override public final MessageStream send(java.lang.Object message)
@Override public final void setParallelGroup(PGroup group)
group
- new group
@Override public Actor silentStart()
@Override public final SequentialProcessingActor start()
@Override public final Actor stop()
@Override protected final ActorMessage sweepNextMessage()
protected final ActorMessage takeMessage()
protected ActorMessage takeMessage(long timeout, java.util.concurrent.TimeUnit timeUnit)
timeout
- Max time to wait for a messagetimeUnit
- The units for the timeout
@Override public final Actor terminate()
private void throwIfNeeded(ActorMessage toProcess)
toProcess
- The next message to process by the actors
private void transferQueues()
private static java.lang.Object unwrapMessage(java.lang.Object msg)
private static boolean verifyLoopCondition(java.util.concurrent.Callable condition)
Copyright © 2008–2010 Václav Pech. All Rights Reserved.