public abstract class SingleThreadEventExecutor extends AbstractScheduledEventExecutor implements OrderedEventExecutor
OrderedEventExecutor's that execute all its submitted tasks in a single thread.| 限定符和类型 | 类和说明 | 
|---|---|
protected static interface  | 
SingleThreadEventExecutor.NonWakeupRunnable
已过时。 
 
override  
wakesUpForTask(java.lang.Runnable) to re-create this behaviour | 
AbstractEventExecutor.LazyRunnable| 限定符 | 构造器和说明 | 
|---|---|
protected  | 
SingleThreadEventExecutor(EventExecutorGroup parent,
                         java.util.concurrent.Executor executor,
                         boolean addTaskWakesUp)
Create a new instance 
 | 
protected  | 
SingleThreadEventExecutor(EventExecutorGroup parent,
                         java.util.concurrent.Executor executor,
                         boolean addTaskWakesUp,
                         int maxPendingTasks,
                         RejectedExecutionHandler rejectedHandler)
Create a new instance 
 | 
protected  | 
SingleThreadEventExecutor(EventExecutorGroup parent,
                         java.util.concurrent.Executor executor,
                         boolean addTaskWakesUp,
                         java.util.Queue<java.lang.Runnable> taskQueue,
                         RejectedExecutionHandler rejectedHandler)  | 
protected  | 
SingleThreadEventExecutor(EventExecutorGroup parent,
                         java.util.concurrent.ThreadFactory threadFactory,
                         boolean addTaskWakesUp)
Create a new instance 
 | 
protected  | 
SingleThreadEventExecutor(EventExecutorGroup parent,
                         java.util.concurrent.ThreadFactory threadFactory,
                         boolean addTaskWakesUp,
                         int maxPendingTasks,
                         RejectedExecutionHandler rejectedHandler)
Create a new instance 
 | 
| 限定符和类型 | 方法和说明 | 
|---|---|
void | 
addShutdownHook(java.lang.Runnable task)
Add a  
Runnable which will be executed on shutdown of this instance | 
protected void | 
addTask(java.lang.Runnable task)
Add a task to the task queue, or throws a  
RejectedExecutionException if this instance was shutdown
 before. | 
protected void | 
afterRunningAllTasks()
Invoked before returning from  
runAllTasks() and runAllTasks(long). | 
boolean | 
awaitTermination(long timeout,
                java.util.concurrent.TimeUnit unit)  | 
protected void | 
cleanup()
Do nothing, sub-classes may override 
 | 
protected boolean | 
confirmShutdown()
Confirm that the shutdown if the instance should be done now! 
 | 
protected long | 
deadlineNanos()
Returns the absolute point in time (relative to  
AbstractScheduledEventExecutor.getCurrentTimeNanos()) at which the next
 closest scheduled task should run. | 
protected long | 
delayNanos(long currentTimeNanos)
Returns the amount of time left until the scheduled task with the closest dead line is executed. 
 | 
void | 
execute(java.lang.Runnable task)  | 
protected boolean | 
hasTasks()  | 
boolean | 
inEventLoop(java.lang.Thread thread)
Return  
true if the given Thread is executed in the event loop,
 false otherwise. | 
protected void | 
interruptThread()
Interrupt the current running  
Thread. | 
<T> java.util.List<java.util.concurrent.Future<T>> | 
invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks)  | 
<T> java.util.List<java.util.concurrent.Future<T>> | 
invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks,
         long timeout,
         java.util.concurrent.TimeUnit unit)  | 
<T> T | 
invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks)  | 
<T> T | 
invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks,
         long timeout,
         java.util.concurrent.TimeUnit unit)  | 
boolean | 
isShutdown()  | 
boolean | 
isShuttingDown()
Returns  
true if and only if all EventExecutors managed by this EventExecutorGroup
 are being shut down gracefully or was shut down. | 
boolean | 
isTerminated()  | 
void | 
lazyExecute(java.lang.Runnable task)
Like  
Executor.execute(Runnable) but does not guarantee the task will be run until either
 a non-lazy task is executed or the executor is shut down. | 
protected java.util.Queue<java.lang.Runnable> | 
newTaskQueue()
已过时。 
 
Please use and override  
newTaskQueue(int). | 
protected java.util.Queue<java.lang.Runnable> | 
newTaskQueue(int maxPendingTasks)
Create a new  
Queue which will holds the tasks to execute. | 
protected java.lang.Runnable | 
peekTask()  | 
int | 
pendingTasks()
Return the number of tasks that are pending for processing. 
 | 
protected java.lang.Runnable | 
pollTask()  | 
protected static java.lang.Runnable | 
pollTaskFrom(java.util.Queue<java.lang.Runnable> taskQueue)  | 
protected static void | 
reject()  | 
protected void | 
reject(java.lang.Runnable task)
Offers the task to the associated  
RejectedExecutionHandler. | 
void | 
removeShutdownHook(java.lang.Runnable task)
Remove a previous added  
Runnable as a shutdown hook | 
protected boolean | 
removeTask(java.lang.Runnable task)  | 
protected abstract void | 
run()
Run the tasks in the  
taskQueue | 
protected boolean | 
runAllTasks()
Poll all tasks from the task queue and run them via  
Runnable.run() method. | 
protected boolean | 
runAllTasks(long timeoutNanos)
Poll all tasks from the task queue and run them via  
Runnable.run() method. | 
protected boolean | 
runAllTasksFrom(java.util.Queue<java.lang.Runnable> taskQueue)
Runs all tasks from the passed  
taskQueue. | 
protected boolean | 
runScheduledAndExecutorTasks(int maxDrainAttempts)
Execute all expired scheduled tasks and all current tasks in the executor queue until both queues are empty,
 or  
maxDrainAttempts has been exceeded. | 
void | 
shutdown()
已过时。  
 | 
Future<?> | 
shutdownGracefully(long quietPeriod,
                  long timeout,
                  java.util.concurrent.TimeUnit unit)
Signals this executor that the caller wants the executor to be shut down. 
 | 
protected java.lang.Runnable | 
takeTask()
Take the next  
Runnable from the task queue and so will block if no task is currently present. | 
Future<?> | 
terminationFuture()
Returns the  
Future which is notified when all EventExecutors managed by this
 EventExecutorGroup have been terminated. | 
ThreadProperties | 
threadProperties()
 | 
protected void | 
updateLastExecutionTime()
Updates the internal timestamp that tells when a submitted task was executed most recently. 
 | 
protected boolean | 
wakesUpForTask(java.lang.Runnable task)
Can be overridden to control which tasks require waking the  
EventExecutor thread
 if it is waiting so that they can be run immediately. | 
protected void | 
wakeup(boolean inEventLoop)  | 
afterScheduledTaskSubmitted, beforeScheduledTaskSubmitted, cancelScheduledTasks, deadlineToDelayNanos, getCurrentTimeNanos, hasScheduledTasks, initialNanoTime, nanoTime, nextScheduledTaskDeadlineNanos, nextScheduledTaskNano, pollScheduledTask, pollScheduledTask, schedule, schedule, scheduleAtFixedRate, scheduleWithFixedDelay, validateScheduledinEventLoop, iterator, newFailedFuture, newProgressivePromise, newPromise, newSucceededFuture, newTaskFor, newTaskFor, next, parent, runTask, safeExecute, shutdownGracefully, shutdownNow, submit, submit, submitclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitinEventLoop, newFailedFuture, newProgressivePromise, newPromise, newSucceededFuture, next, parentiterator, schedule, schedule, scheduleAtFixedRate, scheduleWithFixedDelay, shutdownGracefully, shutdownNow, submit, submit, submitprotected SingleThreadEventExecutor(EventExecutorGroup parent, java.util.concurrent.ThreadFactory threadFactory, boolean addTaskWakesUp)
parent - the EventExecutorGroup which is the parent of this instance and belongs to itthreadFactory - the ThreadFactory which will be used for the used ThreadaddTaskWakesUp - true if and only if invocation of addTask(Runnable) will wake up the
                          executor threadprotected SingleThreadEventExecutor(EventExecutorGroup parent, java.util.concurrent.ThreadFactory threadFactory, boolean addTaskWakesUp, int maxPendingTasks, RejectedExecutionHandler rejectedHandler)
parent - the EventExecutorGroup which is the parent of this instance and belongs to itthreadFactory - the ThreadFactory which will be used for the used ThreadaddTaskWakesUp - true if and only if invocation of addTask(Runnable) will wake up the
                          executor threadmaxPendingTasks - the maximum number of pending tasks before new tasks will be rejected.rejectedHandler - the RejectedExecutionHandler to use.protected SingleThreadEventExecutor(EventExecutorGroup parent, java.util.concurrent.Executor executor, boolean addTaskWakesUp)
parent - the EventExecutorGroup which is the parent of this instance and belongs to itexecutor - the Executor which will be used for executingaddTaskWakesUp - true if and only if invocation of addTask(Runnable) will wake up the
                          executor threadprotected SingleThreadEventExecutor(EventExecutorGroup parent, java.util.concurrent.Executor executor, boolean addTaskWakesUp, int maxPendingTasks, RejectedExecutionHandler rejectedHandler)
parent - the EventExecutorGroup which is the parent of this instance and belongs to itexecutor - the Executor which will be used for executingaddTaskWakesUp - true if and only if invocation of addTask(Runnable) will wake up the
                          executor threadmaxPendingTasks - the maximum number of pending tasks before new tasks will be rejected.rejectedHandler - the RejectedExecutionHandler to use.protected SingleThreadEventExecutor(EventExecutorGroup parent, java.util.concurrent.Executor executor, boolean addTaskWakesUp, java.util.Queue<java.lang.Runnable> taskQueue, RejectedExecutionHandler rejectedHandler)
@Deprecated protected java.util.Queue<java.lang.Runnable> newTaskQueue()
newTaskQueue(int).protected java.util.Queue<java.lang.Runnable> newTaskQueue(int maxPendingTasks)
Queue which will holds the tasks to execute. This default implementation will return a
 LinkedBlockingQueue but if your sub-class of SingleThreadEventExecutor will not do any blocking
 calls on the this Queue it may make sense to @Override this and return some more performant
 implementation that does not support blocking operations at all.protected void interruptThread()
Thread.protected java.lang.Runnable pollTask()
Queue.poll()protected static java.lang.Runnable pollTaskFrom(java.util.Queue<java.lang.Runnable> taskQueue)
protected java.lang.Runnable takeTask()
Runnable from the task queue and so will block if no task is currently present.
 
 Be aware that this method will throw an UnsupportedOperationException if the task queue, which was
 created via newTaskQueue(), does not implement BlockingQueue.
 
null if the executor thread has been interrupted or waken up.protected java.lang.Runnable peekTask()
Queue.peek()protected boolean hasTasks()
Collection.isEmpty()public int pendingTasks()
protected void addTask(java.lang.Runnable task)
RejectedExecutionException if this instance was shutdown
 before.protected boolean removeTask(java.lang.Runnable task)
Collection.remove(Object)protected boolean runAllTasks()
Runnable.run() method.true if and only if at least one task was runprotected final boolean runScheduledAndExecutorTasks(int maxDrainAttempts)
maxDrainAttempts has been exceeded.maxDrainAttempts - The maximum amount of times this method attempts to drain from queues. This is to prevent
                         continuous task execution and scheduling from preventing the EventExecutor thread to
                         make progress and return to the selector mechanism to process inbound I/O events.true if at least one task was run.protected final boolean runAllTasksFrom(java.util.Queue<java.lang.Runnable> taskQueue)
taskQueue.taskQueue - To poll and execute all tasks.true if at least one task was executed.protected boolean runAllTasks(long timeoutNanos)
Runnable.run() method.  This method stops running
 the tasks in the task queue and returns if it ran longer than timeoutNanos.@UnstableApi protected void afterRunningAllTasks()
runAllTasks() and runAllTasks(long).protected long delayNanos(long currentTimeNanos)
@UnstableApi protected long deadlineNanos()
AbstractScheduledEventExecutor.getCurrentTimeNanos()) at which the next
 closest scheduled task should run.protected void updateLastExecutionTime()
runAllTasks() and runAllTasks(long) updates this timestamp automatically, and thus there's
 usually no need to call this method.  However, if you take the tasks manually using takeTask() or
 pollTask(), you have to call this method at the end of task execution loop for accurate quiet period
 checks.protected abstract void run()
taskQueueprotected void cleanup()
protected void wakeup(boolean inEventLoop)
public boolean inEventLoop(java.lang.Thread thread)
EventExecutortrue if the given Thread is executed in the event loop,
 false otherwise.inEventLoop 在接口中 EventExecutorpublic void addShutdownHook(java.lang.Runnable task)
Runnable which will be executed on shutdown of this instancepublic void removeShutdownHook(java.lang.Runnable task)
Runnable as a shutdown hookpublic Future<?> shutdownGracefully(long quietPeriod, long timeout, java.util.concurrent.TimeUnit unit)
EventExecutorGroupEventExecutorGroup.isShuttingDown() starts to return true, and the executor prepares to shut itself down.
 Unlike EventExecutorGroup.shutdown(), graceful shutdown ensures that no tasks are submitted for 'the quiet period'
 (usually a couple seconds) before it shuts itself down.  If a task is submitted during the quiet period,
 it is guaranteed to be accepted and the quiet period will start over.shutdownGracefully 在接口中 EventExecutorGroupquietPeriod - the quiet period as described in the documentationtimeout - the maximum amount of time to wait until the executor is EventExecutorGroup.shutdown()
                    regardless if a task was submitted during the quiet periodunit - the unit of quietPeriod and timeoutEventExecutorGroup.terminationFuture()public Future<?> terminationFuture()
EventExecutorGroupFuture which is notified when all EventExecutors managed by this
 EventExecutorGroup have been terminated.terminationFuture 在接口中 EventExecutorGroup@Deprecated public void shutdown()
shutdown 在接口中 EventExecutorGroupshutdown 在接口中 java.util.concurrent.ExecutorServiceshutdown 在类中 AbstractEventExecutorpublic boolean isShuttingDown()
EventExecutorGrouptrue if and only if all EventExecutors managed by this EventExecutorGroup
 are being shut down gracefully or was shut down.isShuttingDown 在接口中 EventExecutorGrouppublic boolean isShutdown()
isShutdown 在接口中 java.util.concurrent.ExecutorServicepublic boolean isTerminated()
isTerminated 在接口中 java.util.concurrent.ExecutorServiceprotected boolean confirmShutdown()
public boolean awaitTermination(long timeout,
                                java.util.concurrent.TimeUnit unit)
                         throws java.lang.InterruptedException
awaitTermination 在接口中 java.util.concurrent.ExecutorServicejava.lang.InterruptedExceptionpublic void execute(java.lang.Runnable task)
execute 在接口中 java.util.concurrent.Executorpublic void lazyExecute(java.lang.Runnable task)
AbstractEventExecutorExecutor.execute(Runnable) but does not guarantee the task will be run until either
 a non-lazy task is executed or the executor is shut down.
 
 The default implementation just delegates to Executor.execute(Runnable).
 
lazyExecute 在类中 AbstractEventExecutorpublic <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks)
                throws java.lang.InterruptedException,
                       java.util.concurrent.ExecutionException
invokeAny 在接口中 java.util.concurrent.ExecutorServiceinvokeAny 在类中 java.util.concurrent.AbstractExecutorServicejava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionpublic <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks,
                       long timeout,
                       java.util.concurrent.TimeUnit unit)
                throws java.lang.InterruptedException,
                       java.util.concurrent.ExecutionException,
                       java.util.concurrent.TimeoutException
invokeAny 在接口中 java.util.concurrent.ExecutorServiceinvokeAny 在类中 java.util.concurrent.AbstractExecutorServicejava.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionjava.util.concurrent.TimeoutExceptionpublic <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks)
                                                             throws java.lang.InterruptedException
invokeAll 在接口中 java.util.concurrent.ExecutorServiceinvokeAll 在类中 java.util.concurrent.AbstractExecutorServicejava.lang.InterruptedExceptionpublic <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks,
                                                                    long timeout,
                                                                    java.util.concurrent.TimeUnit unit)
                                                             throws java.lang.InterruptedException
invokeAll 在接口中 java.util.concurrent.ExecutorServiceinvokeAll 在类中 java.util.concurrent.AbstractExecutorServicejava.lang.InterruptedExceptionpublic final ThreadProperties threadProperties()
ThreadProperties of the Thread that powers the SingleThreadEventExecutor.
 If the SingleThreadEventExecutor is not started yet, this operation will start it and block until
 it is fully started.protected boolean wakesUpForTask(java.lang.Runnable task)
EventExecutor thread
 if it is waiting so that they can be run immediately.protected static void reject()
protected final void reject(java.lang.Runnable task)
RejectedExecutionHandler.task - to reject.