作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我认为 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());
}
最佳答案
I/O 工作线程在 channel 关闭后立即发出 future 信号,然后继续处理回调。在这种情况下,您的线程池线程在 I/O worker 能够触发相关的断开连接、未绑定(bind)和关闭事件之前被重新调度。当您通过调试器运行时,您正在更改线程的调度方式。
通常,future 用于确定请求的操作何时完成,而不是确定可能由操作完成触发的任何其他操作也已完成。
看看https://github.com/netty/netty/blob/master/src/main/java/io/netty/channel/socket/nio/NioWorker.java特别是用于确切逻辑的 void close(NioSocketChannel channel, ChannelFuture future) 方法。
关于netty - 在netty中不间断地等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8441938/
我是一名优秀的程序员,十分优秀!