【发布时间】:2016-08-18 15:27:57
【问题描述】:
我有一个 Netty 服务器,我需要在另一个线程中关闭请求通道。这样做线程安全吗?如果没有,是否有一些解决方法可以解决它?任何建议表示赞赏!
顺便说一句,我正在使用带有 NioEventLoopGroup 的 netty-4.0.34。
AbstractChannelHandlerContext.java:514
@Override
public ChannelFuture close(final ChannelPromise promise) {
if (!validatePromise(promise, false)) {
// cancelled
return promise;
}
final AbstractChannelHandlerContext next = findContextOutbound();
EventExecutor executor = next.executor();
if (next.isHandlerAddedCalled() && executor.inEventLoop()) {
next.invokeClose(promise);
} else {
safeExecute(executor, new OneTimeTask() {
@Override
public void run() {
next.invokeClose(promise);
}
}, promise, null);
}
return promise;
}
如果在另一个线程中调用,该通道所坚持的 IO 线程最终将执行关闭,因为 'executor.inEventLoop()' 将始终为 false。这种解释是真的吗?
【问题讨论】:
标签: thread-safety netty