Concurrency 关于Netty和并发中的处理程序

Concurrency 关于Netty和并发中的处理程序,concurrency,netty,Concurrency,Netty,我对通道管道的上游/下游处理程序中的并发性有一个问题。我一直认为,如果在构建管道时创建了一个新的处理程序,也就是说,处理程序不会在管道之间共享,那么最多有一个线程与处理程序交互 现在,我正在浏览示例。更具体地说,以这个为例: 代码中有一个成员变量,用于计算字节总数: private final AtomicLong transferredBytes = new AtomicLong(); 他们为什么在这里用原子线?处理程序的构造如下所示,请参见: 因此,处理程序不是共享的。我找不到他们为什么要

我对通道管道的上游/下游处理程序中的并发性有一个问题。我一直认为,如果在构建管道时创建了一个新的处理程序,也就是说,处理程序不会在管道之间共享,那么最多有一个线程与处理程序交互

现在,我正在浏览示例。更具体地说,以这个为例:

代码中有一个成员变量,用于计算字节总数:

private final AtomicLong transferredBytes = new AtomicLong();
他们为什么在这里用原子线?处理程序的构造如下所示,请参见:

因此,处理程序不是共享的。我找不到他们为什么要在这里使用原子长度而不是普通长度的原因。有人能解释一下吗


谢谢

这是示例中的一个bug。这里不需要原子长。所以你是对的。如果在每次创建ChannelPipeline时都添加一个新的处理程序实例,那么就不必担心这种并发性问题


我将在netty中修复该示例。谢谢

这是示例中的一个bug。这里不需要原子长。所以你是对的。如果在每次创建ChannelPipeline时都添加一个新的处理程序实例,那么就不必担心这种并发性问题


我将在netty中修复该示例。谢谢

非常感谢您的确认!我们如何确定在哪种情况下应该使用sharable,或者在哪种情况下应该创建新的处理程序?@sharable意味着您可以在不同的ChannelPipeline中安全地拥有相同的实例……非常感谢您的确认!我们如何确定在哪种情况下应该使用sharable,或者在哪种情况下应该创建新的处理程序?@sharable意味着您可以在不同的ChannelPipeline中安全地拥有相同的实例。。。
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
    public ChannelPipeline getPipeline() throws Exception {
        return Channels.pipeline(new DiscardServerHandler());
    }
 });