题
我对通道管道上游/下游处理程序的并发有一个疑问。我一直认为,如果在构造管道时会创建一个新的处理程序(即,在管道中没有共享处理程序),则最多只能与处理程序相互作用。
现在,我正在浏览示例。更具体,以此为例: http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/netty/example/discard/discard/discarderserverhandler.html
在代码中,有一个成员变量(用于计算字节总数):
private final AtomicLong transferredBytes = new AtomicLong();
他们为什么在这里使用原子能?处理程序的构造如下(请参阅 http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/netty/example/discard/discard/discarderver.html):
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(new DiscardServerHandler());
}
});
因此,处理程序没有共享。我找不到他们想在这里使用原子能而不是简单的原因的原因。有人可以解释吗?
谢谢!
解决方案
在示例中,它是一个“错误”。这里不需要原子。所以你是对的。如果您在每个ChannelPipeline创建中添加了处理程序的新实例,则不需要打扰这种并发问题。
我将在Netty中修复示例。谢谢!
不隶属于 StackOverflow