
Объект Queue моделирует очередь заявок, ожидающих приема объектами, следующими за данным в потоковой диаграмме, или же хранилище заявок общего назначения. При необходимости Вы можете задать максимальное время ожидания заявки в очереди. Вы также можете программно извлекать заявки из любых позиций в очереди.
Заявка может покинуть объект Queue различными способами:
В первом случае объект Queue покидает заявка, находящаяся в самом начале очереди (в нулевой позиции). Если заявка направлена в порт outTimeout или outPreempted, то она должна покинуть объект мгновенно. Если включена опция вытеснения, то объект Queue всегда готов принять новую заявку, в противном случае при заполненной очереди заявка принята не будет.
Поступающие заявки помещаются в очередь в определенном порядке: либо согласно правилу FIFO (в порядке поступления в очередь), либо согласно приоритетам заявок. Приоритет может быть либо явно храниться в заявке, либо вычисляться согласно свойствам заявки и каким-то внешним условиям. Очередь с приоритетами всегда примет новую входящую заявку, вычислит ее приоритет и поместит ее в очередь в позицию, соответствующую ее приоритету. Если очередь будет заполнена, то приход новой заявки вынудит последнюю хранящуюся в очереди заявку покинуть объект через порт outPreempted (но если приоритет новой заявки не будет превышать приоритет последней заявки, то тогда вместо нее будет вытеснена именно эта новая заявка).
Вы можете извлекать любые заявки из очереди с помощью метода remove(). В некоторых случаях, например, когда объект Queue используется для моделирования хранилища с произвольным доступом, имеет смысл оставлять порт out несоединенным и извлекать заявки из очереди с помощью метода remove() . Извлеченные из очереди заявки могут быть вставлены в другие процессы с помощью объектов Enter.
Вы можете расширять функциональность объекта Queue, выполняя необходимые Вам действия в момент помещения заявки в очередь, при достижении ею начала очереди, а также при уходе заявки из объекта через любой из его портов. Пожалуйста, обратите внимание, что на момент вызова кода параметра onEnter заявка уже будет помещена в очередь, а на момент вызова кода параметров onExit или onExitTimeout будет удалена из очереди.
При необходимости вместимость очереди может быть установлена максимальной. Вы также можете динамически изменять вместимость очереди.
Заявки в очереди могут отображаться на презентации как стоящими одна за другой (тип анимации Путь), так и стоящими в как-то по-другому заданных местах (подробнее о типах анимации см. в статье Анимация объектов Основной библиотеки).
Статистика собирается только если выбрана опция объекта Включить сбор статистики.int size() - возвращает количество заявок, находящихся в данный момент в очереди.
boolean canEnter() - возвращает true, если в очередь может быть добавлена еще одна заявка.
T get( int index ) - возвращает заявку, находящуюся в позиции с номером index (ближайшая к выходу из очереди позиция имеет номер 0).
T removeFirst() - извлекает первую заявку (из позиции с номером 0) из очереди и возвращает ее.
T remove( T entity ) - извлекает заявку entity из очереди и возвращает ее. Если такой заявки в очереди обнаружено не будет, метод вернет null.
void resetStats() - удаляет статистику, собранную объектом к текущему моменту времени.