代码段是:
final ChannelFuture f = ctx.writeAndFlush(time);
f.addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) {
assert f == future;
ctx.close();
}
});
如果'会发生什么? final ChannelFuture f = ctx.writeAndFlush(time); '执行速度非常快,以便下一个addListener
代码尚未启动。
当第一行代码完成时,线程会通知所有侦听器操作已完成,但此时根本没有侦听器!
之后,添加了一个新的侦听器,但不会再收到通知!
答案 0 :(得分:2)
ChannelFuture保留其完成状态,因此如果在完成后添加了一个监听器,那么"迟到"添加的侦听器会在添加时立即回叫。
请参阅ChannelFuture.addListener(GenericFutureListener)的javadoc,特别是注释:
如果此未来已完成,则指定的侦听器为 立即通知。
查看DefaultPromise的impl。迟侦听器(即未来完成时添加的侦听器)具有自己的处理程序(notifyLateListener)。