S-C*_*S-C 4 java multithreading netty
netty文档建议在ChannelHandlers中使用实例变量来跟踪信道状态.它没有提到您应该使用volatile变量或使用任何其他同步技术来确保跨线程存在一致的视图.
例如,基于每个连接使用此处理程序:
class Handler extends SimpleChannelUpstreamHandler {
int count = 0;
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
++count;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望来自netty线程池的许多不同线程会调用此方法,尽管不是同时发生的,并且可能会看到不一致的视图,从而导致计数不准确.
是这样的吗?或者在netty内部是否存在某种同步会导致对count字段的写入被刷新?
小智 7
如果您的管道中没有执行程序,并且仅在I/O工作线程中执行处理程序,那么您就可以了,因为Netty保证始终从同一个工作线程调用给定的管道实例.
如果您正在向管道添加执行处理程序,那么如果您使用的是Netty的OrderedMemoryAwareThreadPoolExecutor,则可以.
如果从非Netty线程访问管道,或者管道中有非OrderedMemoryAwareThreadPoolExecutor,则需要同步.
我建议您查看Netty用户论坛归档中的以下主题.
| 归档时间: |
|
| 查看次数: |
4804 次 |
| 最近记录: |