входные данные для модели считываются единожды в начале моделирования из файла data.properties и хранятся для доступа в объекте-синглтоне DataSource для доспупа из разных частей программы.
в модели стартуют поток-кассы CashDesk,каждый для работы получает очередь клиентов CashDeskQueue.
Операции над очередями(добавлени/удаление) сопробождаются блокированием очереди через объект cashDeskLock, если очередь пустая, то состояние await до момента пока не появится клиент Signal, и так покругу пока все клиенты не пройдут через все кассы
клиент, который в данный момент времени обслуживается в кассе считается первым в очереди(учитывается при вычислении длины очереди), и удадяется из очереди по окончании обслуживания клиента.
клиенты приходят по одному случайным образом не реже одного клиента в минуту(60 сек).
для ускорения процесса моделирования при установке таймаутов секунды заменены на милисекунды.
для реализации переходов посетителей между очередями, каждый раз после того, как уменьшается одна из очередей(обслужен очередной клиент) зарускается поток монитор QueueMonitor, он пробегает по очередям и ищет ситуации, когда одна очередь больше другой, более чем на 2 клиента, и осуществляет перемещение.
Этот поток монитор QueueMonitor для экономии ресуксов запускается через исполнитель replaceExecutor