Bonjour,
Je cherche a réaliser une pile FIFO synchronisé, j'ai regardé ce que proposait l'API, mais je n'ai trouvé que la classe stack qui propose une pile LIFO et non FIFO.
Existe t-il une classe de l'API qui gere ça ?
Merci
A+
Bonjour,
Je cherche a réaliser une pile FIFO synchronisé, j'ai regardé ce que proposait l'API, mais je n'ai trouvé que la classe stack qui propose une pile LIFO et non FIFO.
Existe t-il une classe de l'API qui gere ça ?
Merci
A+
Une pile est obligatoirement une structure LIFO. Si tu veux une structure FIFO il s'agit de la File.Envoyé par zoullou
Sinon, qu'entends-tu par synchronisé ?
Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS
Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android
avec linkedList tu as ca ! (getFirst(), getLast(), removeFirst() et removeLast() will do the job)
pour la synchoniser, suffit de fairecomme indiqué dans la javadoc
Code : Sélectionner tout - Visualiser dans une fenêtre à part List list = Collections.synchronizedList(new LinkedList(...));
... mais ce qui n'empêche pas de devoir la synchroniser lors des itérationsEnvoyé par lunatix
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 synchronized(list) { for(Iterator i=list.iterator(); i.hasNext();) { Object o = i.next(); } }
Salut,
D'ailleurs avec Java 5.0 cela a été normalisé par l'interface Queue qui est implémenté par LinkedList.Envoyé par lunatix
On dispose ainsi (entre autres) des méthodes offer(E) et poll() qui sont gérer comme une FIFO dans l'implémentation de LinkedList...
a++
après vérification, il me semble que ce n'est pas l'Interface Queue qui convienne dans le cas cité adiGuba, mais plutôt BlockingQueue : elle est synchronizée
Non une BlockingQueue fait bien plus que ca. Elle permet par exemple, lorsque tu veux recuperer un element, de faire un appel bloquant tant que la queue est vide. Une Queue est une Collection et peux donc etre synchronisee par un appel a Collections.synchronizedCollection(Collection<T> c).
A part que l'interface List n'as pas le getFirst et getLast.Envoyé par lunatix
Il faut la déclarer en LinkedList directement.
Tiens c'est bizarre qu'il n'existe aucune méthode Collections.synchronizedQueue(Queue<T>) !!!Une Queue est une Collection et peux donc etre synchronisee par un appel a Collections.synchronizedCollection(Collection<T> c).
Cela pose problème car le type retourné par synchronizedCollection() est bien Collection mais n'implémente pas Queue![]()
Et donc gérer soi-même la synchronisation à chaque utilisation...Envoyé par Satch
a++
Ah heu oui en effetVoila a quoi ce mene de parler trop vite, d'autant plus que j'ai utilise la bonne classe la semaine derniere ^^ La reponse est donc d'utiliser une ConcurrentLinkedQueue.
euu .. ben du coup je me suis penché dessus ... et si kk1 pouvait me dire si SynchronousQueue<E> ne conviendrait pas à son cas ....![]()
Je dis certainement une bêtise .. mais j'aimerai savoir pourquoi svp ..
D'autant plus qu'elle est bloquante je crois ... sacré avantage ...
Non Synchronous force un travail synchrone entre deux threads sur la liste. Lis la doc de la classe tu verras.
il m'avait bien semblé qu'elle ne disait pas ce que je voulais savoir .. mais c'est le concept de synchrone entre 2 threads sur la pile que je ne comprends pas :
Vous pouvez éclaircir ce point ?Retrieves and removes the head of this queue, if another thread is currently making an element available.
ça voudrait dire que le thread d'insertion attend qu'un Thread retire son élément inséré ?
Partager