質問

チャネルパイプの上流/下流のハンドラーの並行性について質問があります。パイプが構築されたときに新しいハンドラーが作成された場合(つまり、ハンドラーがパイプ間で共有されていない)、最大で1つのスレッドがハンドラーと対話するといつも思っていました。

今、私は例を閲覧していました。より具体的には、これを取ります: http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/discard/discardserverhandler.html

コードには、メンバー変数があります(バイトの総数をカウントするために使用されます):

private final AtomicLong transferredBytes = new 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());
    }
 });

したがって、ハンドラーは共有されていません。ここでは、プレーンな長さではなく、アトミックロングを使用したい理由を見つけることができません。誰かが説明できますか?

ありがとう!

役に立ちましたか?

解決

その例の「バグ」。ここにアトミクロンは必要ありません。だからあなたは正しい。すべてのチャンネルパイプライン作成にハンドラーの新しいインスタンスを追加する場合、この種の並行性の問題を悩ます必要はありません。

Nettyでこの例を修正します。ありがとう!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top