Java Thread Communication - PullRequest
       5

Java Thread Communication

0 голосов
/ 11 апреля 2011

Я делаю проект, в котором я должен заставить потоки общаться.

Например,

У меня есть два массива потоков, c[100] и e[10].(клиенты и сотрудники)

Как только клиент скажет, c[3] получает семафор, чтобы он мог говорить с одним из сотрудников, скажем, сотрудник e[5], как мне связать объект Customer, представленный потоком c[3] объекту Employee e[5], и пусть они передают информацию взад и вперед?

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

Существует несколько методов, позволяющих потокам передавать информацию. Самый простой способ - мьютекс над общим состоянием. Одним из наиболее классически масштабируемых способов являются очереди сообщений. Способ, которым вам нужно пользоваться, зависит от вашего домашнего задания.

В общем, защищайте совместно используемое состояние с помощью вашего примитива синхронизации (будь то мьютекс, семафор или что-то еще) и позволяйте несделенному состоянию работать нормально. Если у вас есть сотрудники и клиенты, возможно, они общаются через «почтовый слот», которым они делятся. Защитите этот почтовый слот с помощью своего семафора, чтобы один из них не пытался читать, пока другой пишет (или наоборот), и у вас будет основная стратегия, которая вам нужна.

0 голосов
/ 11 апреля 2011

Другим способом является передача сообщений. Например, вы можете один объект подписаться на слушателя для событий. Когда другой поток вызывает изменение, он сообщает всем слушателям об этом событии, и все слушатели получают уведомление об изменении.

Другим возможным решением является использование потоковых каналов или потоковых преобразований (т.е. PidedInputStrean, PipedOutputStream, PipedReader, PipedWriter). В этой схеме один поток пишет на одной стороне канала, а другой поток читает на другой стороне.

И я почти уверен, что есть несколько других способов сделать это.

...