Package org.simpleframework.transport
Class FlushScheduler
- java.lang.Object
-
- org.simpleframework.transport.FlushScheduler
-
class FlushScheduler extends java.lang.Object
TheFlushScheduler
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:
SocketFlusher
-
-
Field Summary
Fields Modifier and Type Field Description private boolean
closed
This is used to determine if the scheduler is interrupted.private boolean
flushing
This is used to determine if there is currently a flush.private java.lang.Object
lock
This is the lock that is used to signal a blocked thread.private Reactor
reactor
This is the reactor to used to execute the operation.private boolean
running
This is used to determine if the scheduler is running.private Operation
task
This is the operation that is scheduled for execution.private Trace
trace
This is the trace that listens to all transport events.
-
Constructor Summary
Constructors Constructor Description FlushScheduler(Socket socket, Reactor reactor, Operation task, java.lang.Object lock)
Constructor for theFlushScheduler
object.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
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 Detail
-
task
private Operation task
This is the operation that is scheduled for execution.
-
reactor
private Reactor reactor
This is the reactor to used to execute the operation.
-
trace
private Trace trace
This is the trace that listens to all transport events.
-
lock
private java.lang.Object lock
This is the lock that is used to signal a blocked thread.
-
running
private volatile boolean running
This is used to determine if the scheduler is running.
-
closed
private volatile boolean closed
This is used to determine if the scheduler is interrupted.
-
flushing
private volatile boolean flushing
This is used to determine if there is currently a flush.
-
-
Constructor Detail
-
FlushScheduler
public FlushScheduler(Socket socket, Reactor reactor, Operation task, java.lang.Object lock)
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 Detail
-
repeat
public void repeat() throws java.io.IOException
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:
java.io.IOException
-
schedule
public void schedule(boolean block) throws java.io.IOException
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:
java.io.IOException
-
listen
private void listen() throws java.io.IOException
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:
java.io.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.
-
-