线程间的Java消息传递

线程间的Java消息传递,java,multithreading,message-queue,Java,Multithreading,Message Queue,我是Java新手,在线程消息传递方面遇到了一个问题。 我这里的意思是-我有4个线程,一个线程从网络读取消息,并根据消息的类型将消息传递给解析器线程或数据库线程。数据库线程执行一些操作,并且必须将消息发送回第一个将其放入套接字的网络线程。类似地,解析器线程还执行一些操作,并根据结果将消息发送回网络线程或数据库线程。 我尝试过的事情- 我已经读过关于notify()wait()for thread communication的内容,这对我的情况没有帮助,因为我需要一对一的消息传递它的not brao

我是Java新手,在线程消息传递方面遇到了一个问题。 我这里的意思是-我有4个线程,一个线程从网络读取消息,并根据消息的类型将消息传递给解析器线程或数据库线程。数据库线程执行一些操作,并且必须将消息发送回第一个将其放入套接字的网络线程。类似地,解析器线程还执行一些操作,并根据结果将消息发送回网络线程或数据库线程。 我尝试过的事情-

  • 我已经读过关于notify()wait()for thread communication的内容,这对我的情况没有帮助,因为我需要一对一的消息传递它的not braodcast all
  • 我读过关于concurrentqueues blockingqueues的文章-因为这不是一个理想的生产者-消费者问题,其中一个线程正在生成MSG,而其他线程正在从中读取-我不能使用它。 使用它就像我需要每个通信通道有5个队列一样
  • 这样做有效吗

    <>在C++中,我使用MSGING机制,在这里我只把MSG(Windows MSG)发送到相应线程的MSG池,而它的MSCING池中的线程将获得它/p> 有没有像java中的消息传递这样的机制我可以使用

    一个线程从网络读取消息,并根据消息的类型将消息传递给…数据库线程。数据库线程执行一些操作,并且必须将消息发送回第一个将其放入套接字的网络线程

    您让“网络”线程负责等待来自网络的消息,同时也负责等待来自“数据库”线程的消息。那太尴尬了。你可能会发现,要以一种干净、令人满意的方式实现这一点,可能有点困难,也可能不可能

    我个人的观点是,多线程程序中的每个长寿命线程应该只等待一件事

    让数据库线程“将消息发送回第一个网络线程[要放入]套接字”的原因是什么?为什么数据库线程本身不能将消息放入套接字

    如果数据库有充分的理由不发送消息,那么为什么不能将“将消息放入套接字”作为数据库线程提交给服务器的任务呢


    我已经读过关于notify()wait()for thread communication的内容,这在我的情况下没有帮助

    需要帮忙吗

    我读过关于concurrentqueues blockingqueues的文章-因为这不是一个理想的生产者-消费者问题,其中一个线程正在生成MSG,而其他线程正在从中读取-我不能使用它。使用它就像我需要每个通信通道有5个队列

    然后呢?如果向程序中添加更多队列或更多线程使这些线程所做的工作更简单,或者使这些队列的解释更容易理解,那么这是一件坏事吗


    请注意
    wait()
    notify()
    。这些都是低层次的方法,旨在以一种非常具体的方式来建立更高层次的机制。我不知道标准Java
    BlockingQueue
    实现是否实际使用了
    wait()
    notify()
    ,但要实现一个实际使用了该机制的
    BlockingQueue
    并不难。因此,如果
    BlockingQueue
    解决了您的问题,那么这意味着
    wait()
    notify()
    解决了您的问题。你只是没有看到解决办法


    事实上,我愿意打赌
    wait()
    notify()
    可以用来解决任何需要一个线程等待另一个线程的问题。这只是看看你还需要围绕它们构建什么的问题。

    你可能想试试基于actor的消息传递框架,比如akka。看起来你需要RxJava。看看这里
    network->db,
    db->network,
    parser->network,
    parser->db