如何理解接口EventExecutor中的inEventLoop方法?

时间:2019-05-31 09:16:09

标签: java netty nio

我正在阅读netty4.0的源代码。我发现很多地方都有下面的代码,如何全面理解?以下是AbstractChannel类的一部分。

if (eventLoop.inEventLoop()) {
    register0(promise);
} else {
    try {
        eventLoop.execute(new Runnable() {
            @Override
            public void run() {
                register0(promise);
            }
        });
    } catch (Throwable t) {
        logger.warn(
            "Force-closing a channel whose registration task was not accepted by an event loop: {}",
            AbstractChannel.this, t);
        closeForcibly();
        closeFuture.setClosed();
        safeSetFailure(promise, t);
    }
}

1 个答案:

答案 0 :(得分:1)

基本上,如果当前的__init_subclass__Thread相同,则它将直接调用代码。如果不是,则需要分配一个EventExecutor并将其传递给执行。