gestionnaires au sujet de Netty et concurrency
-
25-10-2019 - |
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!
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!