Netty入门学习(四):EventLoopGroup和NioEventLoopGroup的继承体系

139 阅读1分钟
背景
  1. 对于Netty的使用,都会使用bossGroup和workerGroup的方式,而常说的bossGroup和workerGroup其实是NioEventLoopGroup的实例。

  2. 在Netty中,EventLoopGroup和NioEventLoopGroup其实就是一个线程池。


EventLoopGroup和NioEventLoopGroup的继承体系

在这里插入图片描述

  1. Netty中的EventLoopGroup接口直接继承JDK中的EventExecutorGroup接口。

  2. Netty中的NioEventLoopGroup是继承了MultithreadEventLoopGroup抽象类,而MultithreadEventLoopGroup继承MultithreadEventExecutorGroup抽象类。MultithreadEventExecutorGroup抽象类实现了Netty中的EventLoopGroup接口。由此,就可以明白Netty中的类是怎样跟JDK的并发包下面的类关联上关系的。


JDK的Executor的简单用法
public class DemoTask implements Runnable {

    @Override
    public void run() {
        System.out.println("Demo task will run here.");
    }

    static class Worker {
        ExecutorService executorService = Executors.newSingleThreadExecutor();

        public Future execute(Runnable runnable) {
            return executorService.submit(runnable);
        }

    }

    public static void main(String[] args) {
        Worker worker = new Worker();
        worker.execute(new DemoTask());

        worker.execute(() -> {
            System.out.println("----------This is an lambda work------");
            DemoTask dt = new DemoTask();
            dt.run();
        });
    }
}
  1. JDK中是推荐使用Runnable实现多线程逻辑,而这个Runnable实现多线程逻辑,最好是配合Executor来实现。

  2. Executor可以把业务逻辑和线程本身管理给分离开来。也就是说,线程本身的管理工作交给Executor来进行,而线程本身只需要关心它自己的任务(业务逻辑过程)。


小结
  1. Netty中一个核心接口EventLoopGroup是怎么跟JDK并发包下面类进行关联上关系的。

  2. Netty中一个核心类NioEventLoopGroup是怎么跟JDK并发包下面类进行关联上关系的。

  3. Executor是线程池管理类,它把线程本身和线程需要执行的任务隔离开来。