上一章讲了EventExecutorGroup的整体结构和原理,这一章我们来探究一下它的具体实现。
EventExecutorGroup和EventExecutor接口
io.netty.util.concurrent.EventExecutorGroup
java.util.concurrent.ScheduledExecutorService
EventExecutorGroup继承了ScheduledExecutorService接口,它自己定义了如下的新方法
方法 |
说明 |
EventExecutor next() |
取出一个EventExecutor, 这个方法要实现派发任务的策略。 |
Future<?> shutdownGracefully(long quietPeriod, long timeout, TimeUnit unit); |
优雅地关闭这个executor, 一旦这个方法被调用,isShuttingDown()方法总是总是返回true。和 shutdown方法不同,这个方法需要确保在关闭的平静期(由quietPeriod参数决定)没有新的任务被提交,如果平静期有新任务提交,它会接受这个任务,同时中止关闭动作,等任务执行完毕后从新开始关闭流程。 |
Future<?> shutdownGracefully() |
shutdownGracefully(long quietPeriod, long timeout, TimeUnit unit)快捷调用方式。 |
boolean isShuttingDown() |
检查是否已经调用了shutdownGracefully或shutdown方法。 |
io.netty.util.concurrent.EventExecutor implement EventExecutorGroup
EventExecutor定义的接口如下
方法 |
说明 |
boolean inEventLoop() |
如果当前线程是这个Executor返回true |
boolean inEventLoop(Thread thread) |
如果thread是这个Executor的线程返回true |
EventExecutorGroup parent() |
返回持有这个Executor的EventExecutorGroup |
<V> Promise<V> newPromise() |
创建一个新的Promise实例 |
<V> ProgressivePromise<V> newProgressivePromise() |
创建一个新的ProgressivePromise实例 |
<V> Future<V> newSucceededFuture(V result); |
创建一个标记为success的Future实例,Future#isSuccess()返回true |
<V> Future<V> newFailedFuture(Throwable cause) |
创建一个标记为failed的Future实例,Future#isSuccess()返回false |