Mam stworzyć aplikację symulującą pracę kas w sklepie z wizualizacją ich pracy i poruszających
się klientów.
- Klienci przychodzą do kas i wybierają tą z nich przy której jest najmniej osób lub mają
najmniej zakupów. - Klienci o wyższym priorytecie, np. osoby niepełnosprawne lub kobiety w ciąży obsługiwani
są poza kolejnością. - Klienci mogą wybierać kasy wg priorytetów, np. „kasa do 10 produktów”.
- Liczba klientów oraz ilość produktów w wózkach sklepowych generowana jest losowo.
- Liczba kas może się zwiększać lub zmniejszać w zależności od ilości klientów.
- Klienci po określonym czasie oczekiwania mogą zrezygnować z zakupu.
- Aplikacja powinna umożliwiać obsługę wszystkich klientów w skończonym czasie.
Sytuacje wyjątkowe:
- Uszkodzenie kasy (przy kasie jest kolejka, klienci przechodzą do innych kas)
- Zmiana rolki papieru w kasie (wywołanie Thread.sleep(ileś tam) )
- Brak kodu na produkcie (wywołanie Thread.sleep(ileś tam) )
Parametry:
- Liczba kas otwartych domyślnie i wszystkich kas w sklepie (przyjmuje ze maksymalnie jest 6 kas)
- Rodzaj każdej z kas
- Maksymalna ilość klientów i produktów w wózku
- Czas potrzebny na zarejestrowanie w kasie jednego towaru (stała dla wszystkich)
- Czas, po którym klienci rezygnują z zakupów
- Rodzaje priorytetów klientów
Mam pytanie, jak się do tego zabrać, jak zamodelować kolejki przy kasach, aby wszystkie wątki oprócz tego który jest pierwszy czekały przy poszczególnych kasach? czytałem trochę o kolejkach blokujących BlockingQueue<> ale nie wiem czy powinienem tego używać. Jak powinny się komunikować ze sobą te wątki? Jakich obiektów powinienem użyć?
Byłbym bardzo wdzięczny za wszystkie wskazówki i podpowiedzi w stworzeniu takiej aplikacji? Nigdy nie pisałem wielowątkowej aplikacji i mam problem ze stworzeniem takiej symulacji :-(