Java教程:Netty知识点详解(六)

开课吧开课吧锤锤2021-02-23 15:00

近年来,随着云计算、大数据等热门技术的发展和普及,Java在企业中越来越受到重视,公司对于Java人才需求也是每年都在增长,对于这样热门的行业,很多人都是心动的,那么对于如何学习,怎么提高Java的技术,那就来看看本篇文章吧。

Java

NioEventLoopGroup 初始化分析

首先根据 Server 服务端代码,分析 NioEventLoopGroup 的初始化过程。而在分析 NioEventLoopGroup 之前,有必要简单的说一说 NioEventLoopGroup 与 NioEventLoop ,方便后续源码的理解。

NioEventLoop 源码分析前了解

NioEventLoop 的继承体系

Java

从 NioEventLoop 的继承体系中可以看到,NioEventLoop 本身就是一个 Executor,并且还是一个 单线程的 Executor。Executor 必然拥有一个 execute(Runnable command) 的实现方法,而 NioEventLoop 的 execute() 实现方法在其父类 SingleThreadEventExecutor 中,找到具体代码:

    public void execute(Runnable task) {

        if (task == null) {

            throw new NullPointerException("task");

        }

        boolean inEventLoop = inEventLoop();

        addTask(task);

        if (!inEventLoop) {

            startThread();

            if (isShutdown()) {

                boolean reject = false;

                try {

                    if (removeTask(task)) {

                        reject = true;

                    }

                } catch (UnsupportedOperationException e) {

                    // The task queue does not support removal so the best thing we can do is to just move on and

                    // hope we will be able to pick-up the task before its completely terminated.

                    // In worst case we will log on termination.

                }

                if (reject) {

                    reject();

                }

            }

        }

        if (!addTaskWakesUp && wakesUpForTask(task)) {

            wakeup(inEventLoop);

        }

    }

这里不细说,但是贴出这段代码主要为了引出 startThread(); 这句代码,在跟这句代码会发现,它最终调用了 NioEventLoop 的一个成员 Executor 执行了当前成员的 execute() 方法。对应的成员 io.netty.util.concurrent.SingleThreadEventExecutor#executor

Java

而 executor 成员的初始化也是在当前代码执行时创建的匿名 Executor ,也就是执行到即新建并且执行当前 匿名 executr() 方法。

总结:

1、NioEventLoop 本身就是一个 Executor。

2、NioEventLoop 内部封装这一个新的线程 Executor 成员。

3、NioEventLoop 有两个 execute 方法,除了本身的 execute() 方法对应的还有成员属性 Executor 对应的 execute() 方法。

备注: 因为这里出现了四个 Executor,为了区分,我们给其新的名称:

NioEventLoop 本身 Executor:NioEventLoop

NioEventLoop 的成员 Executor:子 Executor

NioEventLoopGroup 本身 Executor :NioEventLoopGroup

NioEventLoopGroup 的构造参数 Executor :总Executor

以上内容由开课吧老师敖丙提供,更多Java教程尽在开课吧广场Java教程频道。更多免费课程可以关注公众号“码农集散地”

有用
分享