Я пробую свои силы в многопоточности в java, чего я никогда раньше не делал. Приложение для домашних животных, которое я сейчас пытаюсь разработать, имеет одну очередь блокировки и несколько рабочих. Приложение придерживается следующих правил:
- Рабочий ожидает сообщения в очереди
- Когда работник получает сообщение из очереди, он обрабатывает его и может выдавать больше сообщений, которые добавляются обратно в очередь.
- Некоторые сообщения не генерируют больше сообщений.
- Приложение запускается с несколькими сообщениями в очереди.
- 1 Worker = 1 Thread
Приложение должно завершиться, если:
- В очереди больше нет сообщений
- Все работники заблокированы и ожидают сообщения для быть израсходованным
По сути, как только все сообщения будут использованы, и в системе не будет создано / представлено больше сообщений, я должен выйти. Приложение гарантированно достигнет этой точки в конечном итоге.
Теперь мой вопрос, я не уверен, что является лучшей практикой / дизайном, чтобы понять, когда вышеупомянутые условия истинны, избегая условий гонки. Любая помощь?
Я в настоящее время на стадии разработки, поэтому у меня нет кода, чтобы показать вам, извините за это (я знаю, мой вопрос на данный момент довольно общий c, поэтому не стесняйтесь задайте мне любой вопрос). Любой совет приветствуется!
Заранее спасибо!