【问题标题】:implementaion independent communication within a process进程内实现独立通信
【发布时间】:2010-01-04 09:03:07
【问题描述】:

同一个进程中的两个线程有​​什么方法可以在不知道彼此接口的情况下进行通信吗?

基本上,一个线程是 STOMP 服务器,另一个是客户端。它们应该以直接方式进行通信(而不是通过套接字),并且它应该独立于实现,所以我不能假设任何一个线程都在等待某个公共消息队列上的消息。 我正在寻找的是java中的某种内置机制,它允许同一进程中的线程进行通信。

有这样的机制吗?如果没有,还有其他方法可以解决这个问题吗?

【问题讨论】:

    标签: java process multithreading communication


    【解决方案1】:

    您可以使用并发消息队列,线程可以在其中发布和接收消息。现在每个线程都必须能够创建自己的消息并理解其他线程的消息,而不是知道其他线程的接口。 通过为这些消息使用不同的界面,这相当容易。此外,还有多种队列可供并发访问,因此您可以选择最适合您的场景的队列。

    【讨论】:

      【解决方案2】:

      好吧,您可以使用第三个线程来充当留言板。但是你必须希望这两个线程可以事先就协议达成一致。它也会相当慢。

      【讨论】:

      • 不一定是第三个线程,只是两个线程都可以访问的对象,例如消息/事件队列。
      • 好吧,“希望”部分是有问题的。基本上,一个线程是 STOMP 服务器,另一个是客户端。他们应该以直接方式(而不是通过套接字)进行通信,而无需“了解”彼此的实现。所以我正在寻找的是java中的某种内置机制,它允许同一进程中的线程进行通信。
      • 是的。这是真实的。您需要确保检查并防止并发修改
      • 不,我不认为你可以做你想做的事。您至少需要达成一些最低限度的先前协议。
      【解决方案3】:

      您能否提供更多详细信息/示例? “沟通”到底是什么意思?

      我可以想到几种方法来做到这一点,共享(全局)状态,PipedInputStream/PipedOutputStream 等。但细节取决于你想要做什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        • 2012-03-11
        • 1970-01-01
        • 2012-02-12
        • 2015-10-16
        • 1970-01-01
        相关资源
        最近更新 更多