我对通道管道的上游/下游处理程序中的并发性有疑问.我一直认为,如果在构造管道时创建了一个新的处理程序(也就是说,处理程序不在管道之间共享),最多只有一个线程与处理程序交互.
现在,我正在浏览这些例子.更具体地说,请看一下:http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/discard/DiscardServerHandler.html
在代码中,有一个成员变量(它用于计算总字节数):
private final AtomicLong transferredBytes = new AtomicLong();
Run Code Online (Sandbox Code Playgroud)
他们为什么在这里使用AtomicLong?处理程序的构造如下(请参阅http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/discard/DiscardServer.html):
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(new DiscardServerHandler());
}
});
Run Code Online (Sandbox Code Playgroud)
因此,处理程序不会共享.我找不到他们想要在这里使用AtomicLong而不是简单长的原因.有人可以解释一下吗?
谢谢!
它是示例中的"bug".这里不需要AtomicLong.所以你是对的.如果在每个ChannelPipeline创建时添加处理程序的新实例,则不需要为这种并发问题而烦恼.
我将修复netty中的示例.谢谢!
| 归档时间: |
|
| 查看次数: |
820 次 |
| 最近记录: |