Как реализовать "Производители-Потребители" где один производитель и несколько потребителей получающих одни и те-же данные?

Пытаюсь реализовать задачу "Производители-Потребители" на BlockingQueue при следующих условиях:

Один производитель (Читаю непрерывные данные с датчика веса из ком порта)

И несколько потребителей:

  1. получает сырые данные и отправляет из отрисовывать на график JavaFX
  2. получает сырые данные, фильтрует их скользящим усреднением и отправляет из отрисовывать на график JavaFX
  3. получает сырые данные, фильтрует их скользящим усреднением, и на основе полученных данных рассчитываю некоторый коэффициент и записываю его в ком порт.

Все в отдельных потоках. Все потребители в моем случае должны получать одно и тоже значение пришедшее от производителя. Как это правильно реализовать?

Стоит ли мне создавать 3 разных очереди в которые производитель будет записывать прочитанное из ком-порта значение или есть более элегантное решение?

Подумал про Exchanger, но если я правильно понял , метод exchange работает только для 2ух (пары) потоков.


Ответы (1 шт):

Автор решения: Sergey Zh.

Стоит ли мне создавать 3 разных очереди в которые производитель будет записывать прочитанное из ком-порта значение или есть более элегантное решение?

Можно и так. Или как вариант добавить одного "супер потребителя", который делегирует вызов остальным трём, но тут есть нюансы. Так что лучше сделать как вы написали - будет надёжнее.

→ Ссылка