Package org.simpleframework.transport
Class FlushScheduler
java.lang.Object
org.simpleframework.transport.FlushScheduler
The
FlushScheduler
object is used to schedule a task
for execution when it is write ready. This is used by the socket
flusher to ensure that the writing thread can be blocked until
such time as all the bytes required to be written are written.
All methods are invoked by a SocketFlusher
object
which is synchronized. This ensures that the methods of the
scheduler are thread safe in that only one thread will access
them at any given time. The lock used by the socket flusher can
thus be safely as it will be synchronized on by the flusher.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate boolean
This is used to determine if the scheduler is interrupted.private boolean
This is used to determine if there is currently a flush.private Object
This is the lock that is used to signal a blocked thread.private Reactor
This is the reactor to used to execute the operation.private boolean
This is used to determine if the scheduler is running.private Operation
This is the operation that is scheduled for execution.private Trace
This is the trace that listens to all transport events. -
Constructor Summary
ConstructorsConstructorDescriptionFlushScheduler
(Socket socket, Reactor reactor, Operation task, Object lock) Constructor for theFlushScheduler
object. -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
This is used to close the scheduler when the reactor is closed by the server.private void
listen()
This is used to listen for a notification from the reactor to tell the thread that the write operation has completed.void
ready()
This is used to signal any blocking threads to wake up.void
release()
This is used to notify any waiting threads that they no longer need to wait.void
repeat()
This is used to repeat schedule the operation for execution.void
schedule
(boolean block) This is used to schedule the task for execution.
-
Field Details
-
task
This is the operation that is scheduled for execution. -
reactor
This is the reactor to used to execute the operation. -
trace
This is the trace that listens to all transport events. -
lock
This is the lock that is used to signal a blocked thread. -
running
private volatile boolean runningThis is used to determine if the scheduler is running. -
closed
private volatile boolean closedThis is used to determine if the scheduler is interrupted. -
flushing
private volatile boolean flushingThis is used to determine if there is currently a flush.
-
-
Constructor Details
-
FlushScheduler
Constructor for theFlushScheduler
object. This is* used to create a scheduler that will execute the provided task when the associated socket is write ready.- Parameters:
socket
- this is the associated socket for the schedulerreactor
- this is the rector used to schedule executiontask
- this is the task that is executed when writablelock
- this is the lock used to signal blocking threads
-
-
Method Details
-
repeat
This is used to repeat schedule the operation for execution. This is executed if the operation has not fully completed its task. If the scheduler is not in a running state then this will not schedule the task for a repeat execution.- Throws:
IOException
-
schedule
This is used to schedule the task for execution. If this is given a boolean true to indicate that it wishes to block then this will block the calling thread until such time as theready
method is invoked.- Parameters:
block
- indicates whether the thread should block- Throws:
IOException
-
listen
This is used to listen for a notification from the reactor to tell the thread that the write operation has completed. If the thread is interrupted upon this call then this will throw anIOException
with the root cause.- Throws:
IOException
-
release
public void release()This is used to notify any waiting threads that they no longer need to wait. This is used when the flusher no longer needs the waiting thread to block. Such an occurrence happens when all shared data has been written or has been duplicated. -
ready
public void ready()This is used to signal any blocking threads to wake up. When this is invoked blocking threads are signaled and they can return. This is typically done when the task has finished. -
close
public void close()This is used to close the scheduler when the reactor is closed by the server. An close will happen when the server has been shutdown, it ensures there are no threads lingering waiting for a notification when the reactor has closed.
-