gpt4 book ai didi

java - 如何在多个线程之间传递数据和信号

转载 作者:行者123 更新时间:2023-12-01 14:02:21 26 4
gpt4 key购买 nike

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

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

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

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

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

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

非常感谢。

最佳答案

我发布了here最近有一个类似的问题。

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

您的观点:

The queue and the method used for insertion will need to be static OR

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

Each thread that wishes to send a message has to have the object of the communication thread

不 - 只是队列。

Moreover, such send method will provide no way for me to tell the calling thread if the sending fails ...

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

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

关于java - 如何在多个线程之间传递数据和信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com