AbstractEventExecutor

152 阅读1分钟

1 类继承关系

image.png

2 代码详情

AbstractEventExecutor

类签名

public abstract class AbstractEventExecutor extends AbstractExecutorService implements EventExecutor

它是一个抽象类

继承了AbstractExecutorService它是jdk中的类,它提供了这些方法的模板方法,方法中的调用的子函数在子类中实现

  • public Future<?> submit(Runnable task)
  • public T invokeAny(Collection<? extends Callable> tasks)
  • public List<Future> invokeAll(Collection<? extends Callable> tasks)

字段

parent

  • private final EventExecutorGroup parent;
    
  • 表示的是这个EventExecutor处于哪个EventExecutorGroup组中

selfCollection

  • private final Collection selfCollection = Collections.singleton(this);
  • 是一个包含只包含自身的集合

共有方法

构造函数protected AbstractEventExecutor(EventExecutorGroup parent)

  • this.parent = parent;

获取parent

  • @Override public EventExecutorGroup parent() { return parent; }

实现next

  • @Override
    
    public EventExecutor next() { return this; }
  • EventExecutor继承了EventExecutorGroup,这个方法是属于EventExecutorGroup的,然后在next的语义在EventExecutor中的是存在的,所以这里next的实现只是方法自己

获取迭代器

  • @Override public Iterator iterator() { return selfCollection.iterator(); }
  • 这个地方的语义同next

优雅关闭

  • @Override public Future<?> shutdownGracefully() { return shutdownGracefully(DEFAULT_SHUTDOWN_QUIET_PERIOD, DEFAULT_SHUTDOWN_TIMEOUT, TimeUnit.SECONDS); }
  • 这个地方只是提供默认参数

newPromise

  • @Override public Promise newPromise() { return new DefaultPromise(this); }

newProgressivePromise

  • @Override public ProgressivePromise newProgressivePromise() { return new DefaultProgressivePromise(this); }

newSucceededFuture

  • @Override public Future newSucceededFuture(V result) { return new SucceededFuture(this, result); }

newFailedFuture

  • @Override public Future newFailedFuture(Throwable cause) { return new FailedFuture(this, cause); }

submit

  • @Override
    
    public Future submit(Runnable task) { return (Future) super.submit(task); }
  • @Override
    
    public Future submit(Runnable task, T result) { return (Future) super.submit(task, result); }
  • @Override
    
    public Future submit(Callable task) { return (Future) super.submit(task); }
  • 这个地方都只是调用了父类AbstractExecutorService中的模板方法

newTaskFor

  • @Override protected final RunnableFuture newTaskFor(Runnable runnable, T value) { return new PromiseTask(this, runnable, value); }
  • @Override
    
    protected final RunnableFuture newTaskFor(Callable callable) { return new PromiseTask(this, callable); }
  • 这个地方覆写了父类AbstractExecutorService中的方法,所以这样就使得提交到线程池中执行的不在是FutureTask,而是PromiseTask