0%

java | 切换线程

eventloop 是如何切换线程的。

netty 的源码,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
static void invokeChannelRead(final AbstractChannelHandlerContext next, Object msg) {
final Object m = next.pipeline.touch(ObjectUtil.checkNotNull(msg, "msg"), next);
EventExecutor executor = next.executor();
if (executor.inEventLoop()) { // 判断当前 handler 的线程,是否和 eventloop 在同一个线程
next.invokeChannelRead(m);
} else {
executor.execute(new Runnable() {
public void run() {
next.invokeChannelRead(m);
}
});
}

}

如果两个 handler 绑定的是同一个线程,直接调用,否则,将调用代码包装成一个任务对象,由下一个 handler 的线程调度。

请我喝杯咖啡吧~