Bonjour,
Je suis en train de créer un "mini" serveur NIO. Je voudrais effectuer les traitements de lecture dans un autre Thread.
Et j'ai une humble question !
Le serveur lit en boucle les données dans le selector
Et j'ai un thread qui lit en boucle ma queue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 While(true) ..blabla //on parcours les clés dans le selector if(k.isAcceptable()){ blabla... if(k.isReadable()){ // si y'a une clé "lisible" alors il ajoute la clé dans une LinkedList (que je nomme queue) queue.add(k); }
La fonction readData(k); lit le contenu de la clé et fait le traitement correspondant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 while(true) if(queue.size()>=1){ SelectionKey k = queue.remove(); readData(k); } }
Problème:
Le problème, c'est qu'entre le moment où j'ajoute la clé(SelectionKey) dans la queue (linkedList) et que la clé soit effectivement lue et traitée par le thread qui lit la queue.... la clé a été inséré plein de fois dans la queue...
Donc, je me suis dis, "une fois que je lis la clé, je peux faire un k.cancel()..." mais c pas une bonne solution non plus...
La conclusion est que, ce que je veux faire ne peux pas se faire en stockant les clés dans une queue.
Ma conclusion:
En faites, quand je lis les clés, il faut que je lise le contenu et c'est ce le contenu que je met dans la queue (LinketList) et ensuite mon thread "traitement" réalise le traitement correspondant.
Est-ce que ca vous parait correcte ce que je dis?
Merci de m'avoir lu,
Bien cordialement.
Cécilia.
Partager