netty ドキュメントでは、ChannelHandlers でインスタンス変数を使用してチャネルの状態を追跡することを提案しています。スレッド全体で一貫したビューを確保するために、揮発性変数を使用したり、他の同期手法を使用したりする必要があることは言及されていません。
たとえば、このハンドラーを接続ごとに使用すると、次のようになります。
class Handler extends SimpleChannelUpstreamHandler {
int count = 0;
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
++count;
}
}
netty スレッド プールからの多くの異なるスレッドがこのメソッドを呼び出していると予想されますが、同時にではなく、一貫性のないビューが表示される可能性があり、結果としてカウントが不正確になる可能性があります。
これは事実ですか?または、count フィールドへの書き込みがフラッシュされる原因となる netty 内で何らかの同期が行われていますか?