Как понять метод inEventLoop в интерфейсе EventExecutor? - PullRequest
0 голосов
/ 31 мая 2019

Я читаю исходный код 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 Ответ

2 голосов
/ 31 мая 2019

По сути, это «оптимизация», которая напрямую вызывает код, если текущий Thread совпадает с тем, который связан с EventExecutor. Если нет, необходимо выделить Runnable и передать его для выполнения.

...