Java线程通信

时间:2011-04-10 20:48:53

标签: java multithreading semaphore

我正在做一个必须让线程进行沟通的项目。

例如

我有两个线程数组,c[100]e[10]。 (客户和员工)

一旦客户说c[3]获取信号量,让其与其中一名员工说员工e[5],我该如何关联线程所代表的Customer对象{{1} } c[3]对象Employee,让他们来回传递信息?

2 个答案:

答案 0 :(得分:1)

允许线程传递信息有多种技术。最简单的方法是共享状态的互斥锁。最经典的可扩展方式之一是消息队列。您需要使用的方式取决于您的家庭作业的陈述。

通常,使用同步原语(无论是互斥体还是信号量等)保护共享状态,并让非共享状态正常运行。如果您有员工和客户,也许他们通过他们共享的“邮件槽”进行通信。使用您的信号量保护该邮件插槽,以防止在另一个写入时尝试阅读(反之亦然),并且您将拥有所需的主要策略。

答案 1 :(得分:0)

另一种方式是通过消息传递。例如,您可以为一个对象订阅事件的侦听器。当另一个线程导致更改时,它会让所有侦听器知道该事件,并且所有侦听器都会收到有关更改的通知。

另一种可能的解决方案是使用管道流或管道重组(即PidedInputStrean,PipedOutputStream,PipedReader,PipedWriter)。在这个方案中,一个线程在管道的一侧写入,另一个线程在另一侧写入。

而且我很确定还有其他几种方法可以做到。