Question

I ai une question concernant la concurrence dans les gestionnaires en amont / en aval d'un tuyau de canal. Je toujours pensé que si un nouveau gestionnaire est créé lorsque le tube est construit (qui est, le gestionnaire ne sont pas partagées entre les tuyaux), au plus un fil interagit avec le gestionnaire.

Maintenant, je regardais à travers les exemples. Plus spécifique, prenez celui-ci: http: //docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/discard/DiscardServerHandler.html

Dans le code, il y a une variable d'élément (il est utilisé pour compter le nombre total d'octets):

private final AtomicLong transferredBytes = new AtomicLong();

Pourquoi utilisent-ils un AtomicLong ici? Le gestionnaire est construit comme suit (voir 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());
    }
 });

Ainsi, le gestionnaire n'est pas partagée. Je ne peux pas trouver une raison pour laquelle ils veulent utiliser un AtomicLong, au lieu d'une longue plaine, ici. Quelqu'un peut-il expliquer?

Merci!

Était-ce utile?

La solution

est un « bug » dans l'exemple. Il n'y a pas besoin de l'AtomicLong ici. Donc, vous avez raison. Si vous ajoutez une nouvelle instance du gestionnaire à chaque création de ChannelPipeline vous ne devriez pas avoir à se soucier de ce genre de problèmes de concurrence.

Je vais corriger l'exemple Netty. Merci!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top