SingleThreadEventLoop

117 阅读1分钟

1 类继承关系

image.png

2 代码详情

SingleThreadEventLoop

类签名

public abstract class SingleThreadEventLoop extends SingleThreadEventExecutor implements EventLoop

实现了EventLoop接口的抽象类

字段

private final Queue tailTasks;

方法

构造函数:除了会调用父类SingleThreadEventExecutor的构造函数,也会构建tailTasks=new LinkedBlockingQueue(maxPendingTasks);

  • 默认创建的是LinkedBlockingQueue,如果要改变这个行为可以在子类覆盖 protected Queue newTaskQueue(int maxPendingTasks)

public ChannelFuture register(Channel channel)

  • return register(new DefaultChannelPromise(channel, this));
  • 实现的是EventLoopGroup中的方法

public ChannelFuture register(final ChannelPromise promise)

  • 实现的是EventLoopGroup中的方法
  • ObjectUtil.checkNotNull(promise, "promise");
  • promise.channel().unsafe().register(this, promise);
  • return promise;

public final void executeAfterEventLoopIteration(Runnable task)

  • ObjectUtil.checkNotNull(task, "task");
  • if (isShutdown()) { reject(); }
  • if (!tailTasks.offer(task)) { reject(task); }
  • if (!(task instanceof LazyRunnable) && wakesUpForTask(task)) { wakeup(inEventLoop()); }

final boolean removeAfterEventLoopIterationTask(Runnable task)

  • return tailTasks.remove(ObjectUtil.checkNotNull(task, "task"));

protected void afterRunningAllTasks()

  • runAllTasksFrom(tailTasks);
  • 覆盖了父类中的一个钩子方法,使得在关闭的时候,也会执行这个tailTasks队列中的任务