Производитель-потребитель на Яве для рейсов в аэропорт

У меня есть массив из 40 регулярных рейсов; каждый объект полета хранит данные: номер рейса, авиакомпанию, город вылета, город прибытия, время полета, продолжительность полета.

По мере того, как происходит время каждого рейса, поток генератора событий рейса меняет статус каждого рейса с Запланировано на Вылет, на Задержка, на Прибытие и т. д. Эта часть не проблема.

Аспект производитель-потребитель заключается в следующем. Когда происходят эти события (отправление, прибытие, задержка), вышеупомянутый поток генератора событий рейса должен публиковать эти изменения в потоке авиакомпании, по одному потоку для каждой авиакомпании (указанного объектом полета: Southwest, American, так далее.). Затем эти потоки авиакомпаний будут публиковать изменения в каждом потоке мониторинга полетов аэропорта, по одному потоку для каждого аэропорта (опять же, указанного объектом полета). Эти потоки, в свою очередь, публикуют изменения в файле.

Мой вопрос в том, как именно я должен справиться с этой, казалось бы, сложной проблемой производитель-потребитель? Кроме того, как мне обрабатывать два рейса с одинаковым временем вылета?


person aquemini    schedule 21.02.2013    source источник
comment
Вы уверены, что вам нужно использовать потоки для этого? Похоже, вместо потоков вы могли бы сделать то же самое с объектами Flight, Airline и AirportFlightMonitor, работающими вместе в одном потоке.   -  person Peter Berg    schedule 21.02.2013
comment
К сожалению, да, я обязан использовать описанные темы. Мне это не кажется таким уж полезным, но пусть будет так.   -  person aquemini    schedule 21.02.2013


Ответы (2)


Обычно в java для реализации шаблона Producer/Consumer используется java.util.concurrent.BlockingQueue .

Взгляните на этот пост в блоге.

person nkukhar    schedule 21.02.2013

Просмотрите эти видеоуроки на YouTube с помощью caveofprogramming:

Здесь используется очередь блокировки, которую Java поддерживает по умолчанию:
http://www.youtube.com/watch?v=Vrt5LqpH2D0&list=PLBB24CFB073F1048E

Это если вы хотите написать нашу собственную логику синхронизации, используя ожидание, уведомление и т. д.:
http://www.youtube.com/watch?v=gx_YUORX5vk&list=PLBB24CFB073F1048E

На самом деле, вы должны пройти всю серию о многопоточности на его канале. Очень хорошие учебники.

person Vaibhav Desai    schedule 21.02.2013