Я думал, что awaitUninterruptibly означает выполнение кода блока до завершения операции, но, похоже, не так:
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
ChannelFuture f = e.getChannel().close();
f.awaitUninterruptibly(); // ok, not netty i/o thread, I use a Execution Handler
System.out.println("bbb " + System.currentTimeMillis());
}
public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) {
System.out.println("aaa " + System.currentTimeMillis());
}
Я обнаружил, что «bbb» выполняется перед «aaa». Если я перехожу в режим отладки и перебираю строку, «aaa» перед «bbb», потому что выполнение кода было замедлено. Неужели я неправильно понял, жду непрерывно?
ожидают эффекта только для текущего потока, но при использовании ExectionHandler или рабочих потоков пула потоков закрытие может выполняться другим потоком, поэтому ожидание бесполезно. Для этого требуется добавить ChannelFutureListener.