Пример использования очередей

Цель работы: 1) научиться использовать расширенные возможности создания многопоточных приложений на Java.

Продолжительность работы: 4 часа.

Теоретические сведения

Теоретические сведения и подробное описание очередей и исполнителей можно найти в лекциях и по .адресу: http://java.sun.com/docs/books/tutorial/essential/concurrency/highlevel.html

Пример использования очередей

В нижеприведенном примере симулируется ситуация, когда в какое-то хранилище загружается что-то, и одновременно разгружается. В программе представлено два потока (плюс один поток программы). Один поток загружает в хранилище объекты, а второй их оттуда разгружает.

Хранилище имеет ограниченный рамер (константа STORAGE_SIZE). Если места в хранилище нет, погрузчик ожидает освобождения места. С другой стороны, разгрузчик ожидает наличие чего разгружать, если на складе пусто. При окончании загрузки (флаг loadFinished) разгрузчик довыгружает остатки и завершает работу, при этом вместо метода take используется метод poll, т.к.poll в случае если хранилище пусто, не ожидает появления в нем чего-либо, а возвращает null.

Если использовать только take(),то по окончанию загрузки поток-разгрузчик заблокируется навсегда. А если использовать только poll(), то в случае если разгрузка происходит быстрее, чем погрузка, то поток преждевременно сообщит об окончании загрузки и завершит работу, не окончив полностью процесс разгрузки

Ссылка на основную публикацию
Adblock detector