0

我需要编写一个多线程 Java 应用程序,我将在其中创建多个线程来处理不同类型的操作。例如,一个线程将监视应用程序的状态,一个线程将管理与集群中其他节点的通信,一个线程将具有一些应用程序逻辑等等。

在线程之间传递数据和信号的好方法是什么?例如,应用程序逻辑线程可能需要发送一条消息,它可以将其移交给通信线程。这里需要在两个线程之间传输数据。我认为的一种方法是使用一个队列,所有想要发送消息的线程都可以插入他们的消息。但是,它提出了一些问题:

  1. 用于插入的队列和方法需要是静态的或
  2. 每个希望发送消息的线程都必须具有通信线程的对象

此外,如果发送失败(例如,抛出异常),这样的 send 方法将无法告诉调用线程,因为一旦将消息插入队列,调用线程就会认为它发送了它的消息。

对于此类应用程序,在线程之间传递信号和数据的好方法是什么?

对于软件工程师来说,这可能是一个太基础的问题(我来自电子背景)。如果是这样,谁能指出我可以阅读有关设计多线程或多处理应用程序的好来源?

非常感谢。

4

1 回答 1

1

我最近在这里发布了一个类似的问题。

您正在寻找一个BlockingQueue并且正如那里的代码所示,它们很容易使用。

你的观点:

用于插入的队列和方法需要是静态的或

不 - 正如您在示例中看到的那样,如果您构建队列并将其传递给希望进行通信的两个对象(或Map像我在该答案中所做的那样将它们全部保留),它们可以非常愉快地一起工作。

每个希望发送消息的线程都必须具有通信线程的对象

不 - 只是队列。

此外,如果发送失败,这种发送方法将无法让我告诉调用线程......

仅仅因为您已将消息放入队列并不意味着您无法保留它。您可以等待它被另一个线程更改并对其进行响应,或者您可以有两个队列,一个用于消息,一个用于响应,或者在消息中放置一个信号量,当消息被操作时会触发。这就像连接电路一样。

来自电子背景并不意味着你必须道歉 - 有人必须保持灯亮。{咧嘴笑}

于 2013-10-08T22:40:32.220 回答