Hallo,
Kort vraagje: bestaat er zoiets als een onPutListener en een onTakeListener in een PriorityBlockingQueue in java waarbij de onPutListener aangeroepen wordt op het moment dat iemand (= stukje code) iets nieuws toevoegt in de queue? En andersom: waarbij de onTakeListener aangeroepen wordt op het moment dat iemand (= stukje code) iets van de queue afhaalt?
In de documentatie kom ik dit soort gewenste functionaliteit niet tegen, of zoek ik naar de verkeerde spelt in de hooiberg, dat kan ook
Wat ik wil bereiken is dat ik twee queues gebruik die door 1 gemeenschappelijke thread (de dispatch thread) beheert worden, en waarbij andere threads (stuk of 10) zowel kunnen put-en en take-en zonder dat deze threads daarwerkelijk de queue beinvloeden (maw: NIET de berichten in de queue verwijderen, maar overlaten aan de dispatch thread zelf)
Wat ik zou willen is dat de queue en/of dispatch thread weet welke threads een bericht hebben geplaatst en ook welke threads een bericht van de queue hebben gepakt (eigenlijk hebben gekopieerd ipv eraf pakken). Op die manier weet ik wanneer een bericht uit de queue verwijderd kan worden, nadat de laatste thread heeft aangegeven: "ik heb dit bericht ook gelezen". De threads mogen niet bepalen wat van de queue afgehaald wordt, dat moet de dispatch thread doen.
Dus technisch gezien:
Zodra een thread iets op de queue zet: worden alle andere threads geinformeerd dat er een nieuw bericht op de queue is gezet. Zodra alle threads iets van de queue hebben afgehaald/gekopieerd, zal de dispatch thread ook daadwerkelijk het bericht van de queue verwijderen.
Let op: dit is GEEN event bus! Bij een event bus worden de events altijd afgeleverd bij de event-subscriber. In mijn geval is het andersom: de subscriber bepaalt zelf wanneer hij dit bericht van de queue afhaalt. Het kan dus ook zijn dat dit bericht door 9 van de 10 threads direct wordt opgehaald na een "seintje" te hebben gekregen dmv een onPutListener(), maar dat de 10de thread zoiets heeft van: ik haal dit bericht later wel van de queue, ik ben nu met iets anders bezig.
Bestaat er zoiets? Ik zoek nu op PriorityBlockingQueue, BlockingDeque, Event Listenener, Put/Take, maar kom niets op google/stackoverflow tegen dat ook maar in de buurt komt van wat ik wil.
Let wel: de threads dienen allemaal geinformeerd te worden wanneer er iets op de queue gezet wordt, zonder telkens te moeten pollen op de queue. Dus een soort van onClickListener, maar dan voor queues.
Dit zelf implementeren gaan me toch iets boven mijn petje, vooral omdat het gegarandeerd threadsafe moet zijn. Ik ben vast niet de eerste met zulke "queue-wensen".
Alvast bedankt!
Kort vraagje: bestaat er zoiets als een onPutListener en een onTakeListener in een PriorityBlockingQueue in java waarbij de onPutListener aangeroepen wordt op het moment dat iemand (= stukje code) iets nieuws toevoegt in de queue? En andersom: waarbij de onTakeListener aangeroepen wordt op het moment dat iemand (= stukje code) iets van de queue afhaalt?
In de documentatie kom ik dit soort gewenste functionaliteit niet tegen, of zoek ik naar de verkeerde spelt in de hooiberg, dat kan ook
Wat ik wil bereiken is dat ik twee queues gebruik die door 1 gemeenschappelijke thread (de dispatch thread) beheert worden, en waarbij andere threads (stuk of 10) zowel kunnen put-en en take-en zonder dat deze threads daarwerkelijk de queue beinvloeden (maw: NIET de berichten in de queue verwijderen, maar overlaten aan de dispatch thread zelf)
Wat ik zou willen is dat de queue en/of dispatch thread weet welke threads een bericht hebben geplaatst en ook welke threads een bericht van de queue hebben gepakt (eigenlijk hebben gekopieerd ipv eraf pakken). Op die manier weet ik wanneer een bericht uit de queue verwijderd kan worden, nadat de laatste thread heeft aangegeven: "ik heb dit bericht ook gelezen". De threads mogen niet bepalen wat van de queue afgehaald wordt, dat moet de dispatch thread doen.
Dus technisch gezien:
Zodra een thread iets op de queue zet: worden alle andere threads geinformeerd dat er een nieuw bericht op de queue is gezet. Zodra alle threads iets van de queue hebben afgehaald/gekopieerd, zal de dispatch thread ook daadwerkelijk het bericht van de queue verwijderen.
Let op: dit is GEEN event bus! Bij een event bus worden de events altijd afgeleverd bij de event-subscriber. In mijn geval is het andersom: de subscriber bepaalt zelf wanneer hij dit bericht van de queue afhaalt. Het kan dus ook zijn dat dit bericht door 9 van de 10 threads direct wordt opgehaald na een "seintje" te hebben gekregen dmv een onPutListener(), maar dat de 10de thread zoiets heeft van: ik haal dit bericht later wel van de queue, ik ben nu met iets anders bezig.
Bestaat er zoiets? Ik zoek nu op PriorityBlockingQueue, BlockingDeque, Event Listenener, Put/Take, maar kom niets op google/stackoverflow tegen dat ook maar in de buurt komt van wat ik wil.
Let wel: de threads dienen allemaal geinformeerd te worden wanneer er iets op de queue gezet wordt, zonder telkens te moeten pollen op de queue. Dus een soort van onClickListener, maar dan voor queues.
Dit zelf implementeren gaan me toch iets boven mijn petje, vooral omdat het gegarandeerd threadsafe moet zijn. Ik ben vast niet de eerste met zulke "queue-wensen".
Alvast bedankt!