AbstractNioUnsafe:
// 用于将当前Unsafe对应的Channel注册到eventloop的多路复用器上,然后调用DefaultChannelPipeline的fireChannelRegistered方法;
// 如果Channel被激活,则调用DefaultChannelPipeline的fireChannelActive方法
@Override
public final void register(EventLoop eventLoop, final ChannelPromise promise) {
if (eventLoop == null) {
throw new NullPointerException("eventLoop");
}
if (isRegistered()) {
promise.setFailure(new IllegalStateException("registered to an event loop already"));
return;
}
if (!isCompatible(eventLoop)) {
promise.setFailure(
new IllegalStateException("incompatible event loop type: " + eventLoop.getClass().getName()));
return;
}
AbstractChannel.this.eventLoop = eventLoop;
// 这里存在多线程并发 操作Channel的问题:如果是当前线程操作,则不存在并发问题;
// 如果是用户线程或者其他线程,则将注册操作封装成Runnable,放到NioEcentLoop的任务队列中执行
if (eventLoop.inEventLoop()) {
register0(promise);