2015-02-16 7 views
0

У меня есть определенное количество нитей, скажем, 5 темы: A, B, C, D и E.Связь между несколькими потоками

Я хотел бы знать, что некоторые специфические подходы к дизайну интерфейса связи между эти потоки, так что поток получателя может отличать сообщения от разных отправителей. Кроме того, каждый поток также должен иметь возможность отправлять сообщения самому себе.

Например, могу ли я спроектировать каждую нить, чтобы иметь несколько BlockingQueues, по одному для каждой нити отправителя? Кроме того, каждый поток имеет список приемников, в которых он может отправлять сообщения? Рекомендуется ли это?

Каков наилучший/разумный способ реализации этого в java?

+3

Создать очередь сообщений для каждой пары потоков, которые необходимо обменивать? (На самом деле по одному для каждого направления) – immibis

+1

Проблема потоковой передачи является выбором реализации и не имеет особого отношения к вашему вопросу, а именно об ограничении экземпляров «общением» с ограниченным числом других экземпляров. – Bohemian

+0

Ответ будет зависеть от того, как вам нужно это сообщение, т. Е. Нужно ли B дождаться, пока A не отправит сообщение? Что насчет Ожидания B? И то же самое для других ... –

ответ

1

Вы хотите, чтобы сообщение проходило между каждым потоком. Я бы структурировал программу, сначала создав интерфейсы передачи сообщений, затем создав класс класса A и класс B и передав интерфейс в качестве аргумента для обоих. Затем запустите потоки.

Для java класс TransferQueue выглядит как хороший выбор. Если вам не нужны некоторые из его функций, вы также можете использовать ConcurrentLinkedList. Используйте два для двунаправленной связи.

Смежные вопросы