Jedyne co mi przychodzi do głowy to aby traktować paczkę jako Touple: typu obiektowego
https://docs.oracle.com/middleware/11119/jdev/api-reference-esdk/oracle/javatools/util/Tuple.html
-cukierników jest wielu:
Więc to bym traktował jako "wątki", to jest klasyczne zadanie na wątki i np wykorzystanie ExecutorService. Każdy jeden wątek działający to "worker".
Pakowacz jest jeden?
Jeśli tak to mamy tutaj problem z blokującym mechanizmem gdzie "działanie" jednego z wątków pakowacza, powinno być synchronizowane, tak aby wszystkie inne wątki czekał na zwolnienie (coś kurcze mi tu śmierdzi problemem SEMAFORA) i jego wykorzystaniem praktycznym.
Prodkut, box na ciastka możesz traktować jako TOUPLE, albo jako mape: która zawiera klucz- będący czymś co odróżnia od siebie każy box ciastek (numer seryjny), a ciastkami będzie zbiór np. powiedzmy że mimo wszystko każde ciastko nie jest tym samym obiektem mimo, że jednak jest robione z tego samego.
Jak łączyć ciastka, więc ustawić jakąs funkcja działającą co "Dwa elementy" i dodawać dwa elementy do zbioru, kiedy zbiór będzie miał 2 elementy, koniec generujemy NR SERYJNY wsadzamy jako klucz do mapy, i pod tym kluczem wsadzasz ten box ciastek, i powtarzasz to dla kolejnych ciastek.
Tyle na daną chwile mi przychodzi do głowy, jesli rozumiem twój problem. Dawaj znać jak coś, rozwinę myśl.