DR_Demons
@DR_Demons

Как сформировать очередь в простом многопоточном приложение Java?

Здравствуйте! Изучаю Java и в данный момент многопоточность, следующая задача автомойка с n количеством боксов, рабочих и машины которые приезжают туда, встают в очередь и когда освобождается свободный бокс занимают его для помывки. Соответственно имеем класс автомойка, авто, бокс, рабочий. Я предполагаю так класс авто формирует очередь и запускает рабочих(потоки - демоны) которые выполняют некоторые методы в классах бокс и авто.

Не понятно пока что как происходит сам процесс построения очереди и определяется свободен бокс или занят?

Заранее Спасибо!

з.ы. Особенно хорошо было бы посмотреть на примере.
Использовать java.util.concurrent.*; по заданию нельзя.
  • Вопрос задан
  • 2307 просмотров
Пригласить эксперта
Ответы на вопрос 2
targetjump
@targetjump
Тут хорошо бы подошел семафор.

Про BlockingQueue-s коротко, норм тут
Ответ написан
@gurinderu
java developer
Я бы посоветовал сделать некую реализацию Condition.

Грубо говоря, при локе запоминать все потоки которые пришли к нам, а лучше связывать их в очереди, и при освобождении посылать сигнал о том, что у нас есть свободное место и брать первый из этой очереди. Вообще советую посмотреть в AbstractQueuedSynchronizer методы await и signal.

После примерной вашей реализации такого же механизма будет все довольно просто)
При поступлении в очередь вы проверяете есть ли место, если есть то прост добавляем в очередь, если нету, то паркуем поток через аналог метода await, при выходе с метода, шлем signal, чтобы в вашу очередь зашел первый припаркованный поток.

Можно конечно попробовать проще, сделать sychronized метод добавления в очередь, и если у нас размер больше не отпускать его, сделать бесконечный цикл. А как только появится место, то отпустить)

Решайте сами как лучше.)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы