Interesuje mnie struktura danych identyczna z Java BlockingQueue, z tym wyjątkiem, że musi mieć możliwość grupowania obiektów w kolejce. Innymi słowy, chciałbym, aby producent mógł umieścić obiekty w kolejce, ale mieć blok konsumenta na take()
, aż kolejka osiągnie określony rozmiar (wielkość partii).Java BlockingQueue z dozowaniem?
Następnie, po osiągnięciu przez kolejkę wielkości partii, producent musi zablokować na put()
, aż konsument zużyje wszystkie elementy w kolejce (w takim przypadku producent rozpocznie produkcję ponownie, a blok konsumenta do partii zostanie ponownie osiągnięty).
Czy istnieje podobna struktura danych? Czy powinienem to napisać (co nie przeszkadza mi), po prostu nie chcę tracić czasu, jeśli coś tam jest.
UPDATE
Może wyjaśnienie rzeczy trochę:
sytuacja zawsze będzie wyglądał następująco. Może istnieć wielu producentów dodających elementy do kolejki, ale nigdy nie będzie więcej niż jednego konsumenta, który będzie pobierał elementy z kolejki.
Problem polega na tym, że wiele z tych konfiguracji jest równoległych i seryjnych. Innymi słowy, producenci produkują przedmioty dla wielu kolejek, podczas gdy konsumenci samodzielnie mogą być również producentami. Można to łatwiej uznać za skierowany wykres producentów, konsumentów i konsumentów.
Powód, dla którego producenci powinni blokować, dopóki kolejki nie są puste (@Peter Lawrey), ponieważ każdy z nich będzie działał w wątku. Jeśli zostawisz je po prostu w celu wytworzenia, gdy przestrzeń stanie się dostępna, skończy się sytuacja, w której zbyt wiele wątków będzie próbowało przetwarzać zbyt wiele rzeczy naraz.
Może połączenie tego z usługą wykonawczą może rozwiązać problem?
Chcę, aby producent blokował, gdy konsument jest zajęty. –
Ciekawe, że większość systemów robi duże starania, aby tego uniknąć. ;) Druga sugestia zrobi dokładnie to. Jeśli chcesz zablokować producenta, dlaczego używasz wielu wątków? Czy nie byłoby prostsze, gdyby "producent" był procesorem/konsumentem, a jednocześnie wydaje się, że nie chcesz, aby działały w tym samym czasie. –
Proszę zobaczyć moją aktualizację. Projekt wymaga od producentów blokowania, tak aby liczba wykonywanych wątków była niska. Rozwiązuje również problem zależności między producentami a konsumentami. –