Как реализовать "Производители-Потребители" где один производитель и несколько потребителей получающих одни и те-же данные?
Пытаюсь реализовать задачу "Производители-Потребители" на BlockingQueue при следующих условиях:
Один производитель (Читаю непрерывные данные с датчика веса из ком порта)
И несколько потребителей:
- получает сырые данные и отправляет из отрисовывать на график JavaFX
- получает сырые данные, фильтрует их скользящим усреднением и отправляет из отрисовывать на график JavaFX
- получает сырые данные, фильтрует их скользящим усреднением, и на основе полученных данных рассчитываю некоторый коэффициент и записываю его в ком порт.
Все в отдельных потоках. Все потребители в моем случае должны получать одно и тоже значение пришедшее от производителя. Как это правильно реализовать?
Стоит ли мне создавать 3 разных очереди в которые производитель будет записывать прочитанное из ком-порта значение или есть более элегантное решение?
Подумал про Exchanger, но если я правильно понял , метод exchange работает только для 2ух (пары) потоков.
Ответы (1 шт):
Стоит ли мне создавать 3 разных очереди в которые производитель будет записывать прочитанное из ком-порта значение или есть более элегантное решение?
Можно и так. Или как вариант добавить одного "супер потребителя", который делегирует вызов остальным трём, но тут есть нюансы. Так что лучше сделать как вы написали - будет надёжнее.