【问题标题】:Java: What object is more appropriate?Java:什么对象更合适?
【发布时间】:2011-04-01 05:04:28
【问题描述】:

我正在编写一个类似于聊天服务器-客户端对的应用程序。

我计划有一个中心对象,它将保存从客户端收到的新消息,直到它们被主线程处理。

我的应用程序是多线程的。每个客户端都在自己的线程上,因此多个线程将向这个中心对象添加消息。

主线程将检查这个对象的消息,删除“最旧的”并适当地处理它。最好我希望消息按照添加的顺序(FIFO)进行处理。

什么类型的对象最适合保存新消息?我研究了 Vectors 和 ArrayLists,但我对同步方面感到困惑。我以前从未使用过同步或线程。

谢谢

【问题讨论】:

    标签: java multithreading synchronization vector arraylist


    【解决方案1】:

    虽然不是一个直接的答案(因为@Alison 提供了一个足够体面的答案,前提是您不需要保留消息)只要您需要数据结构类或实用程序类来查看 java.util.concurrent 包多线程编码帮助:http://download-llnw.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html

    【讨论】:

      【解决方案2】:

      您也可以为这个项目考虑jgroups

      JGroups 是一个开源可靠的群组通信工具包。它可靠且易于使用。这是相同教程中的基本chat example

      【讨论】:

        【解决方案3】:

        如果这不仅仅是一个小玩具项目,您应该查看JMS,它可以解决您尚未意识到的所有小问题。

        一个好的 JMS 实现是Apache ActiveMQ(与 IBM 的 MQSeries 无关)。

        【讨论】:

        • 尽管我喜欢 AMQ(和 JMS),但我不同意这种情况除非 OP 需要消息持久性或所述消息的多个消费者(在不同进程中)。他们也没有说明。在这种情况下,JMS 变得有点过于重量级了。
        • 正如我所说:“如果这是一个严肃的项目”,这意味着:如果您需要所有常见的东西,例如防止丢失消息、重复消息、事务等。
        【解决方案4】:

        ConcurrentLinkedQueue 听起来很可能。

        更多信息在这里:How to use ConcurrentLinkedQueue?

        此处为 Javadoc:http://download-llnw.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-26
          • 2016-09-04
          • 1970-01-01
          • 1970-01-01
          • 2011-03-23
          • 2019-10-09
          相关资源
          最近更新 更多