Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:什么对象更合适?_Java_Multithreading_Synchronization_Vector_Arraylist - Fatal编程技术网

Java:什么对象更合适?

Java:什么对象更合适?,java,multithreading,synchronization,vector,arraylist,Java,Multithreading,Synchronization,Vector,Arraylist,我正在编写一个类似于聊天服务器客户端对的应用程序 我计划有一个中心对象,它将保存从客户端接收的新消息,直到它们被主线程处理 我的应用程序是多线程的。每个客户机都有自己的线程,因此多个线程将向这个中心对象添加消息 主线程将检查此对象的消息,删除“最旧的”并适当处理它。最好我希望消息被处理的顺序与它们被添加的顺序相同(FIFO) 什么类型的对象最适合保存新消息?我研究了向量和数组列表,但我对同步方面感到困惑。我以前从未使用过同步或线程 谢谢ConcurrentLinkedQueue听起来很有可能 更

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

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

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

主线程将检查此对象的消息,删除“最旧的”并适当处理它。最好我希望消息被处理的顺序与它们被添加的顺序相同(FIFO)

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


谢谢

ConcurrentLinkedQueue
听起来很有可能

更多信息请点击此处:


Javadoc here:

如果这不仅仅是一个小玩具项目,那么您应该研究哪些解决了您尚未意识到的所有小问题

一个好的JMS实现是(与IBM的MQSCORE无关)。

您也可以考虑这个项目。 JGroups是一个开源的可靠组通信工具包。它可靠且使用简单。这是同一教程中的一个基本问题。

虽然不是一个直接的答案(因为@Alison提供了一个足够好的答案,前提是您不需要持久化消息),但每当您需要数据结构类或实用程序类来帮助进行多线程编码时,请务必查看java.util.concurrent包:

就像我喜欢AMQ(和JMS)一样我不同意这种情况,除非OP需要消息持久性或所述消息的多个使用者(在不同的过程中)。他们也没有表示。在这种情况下,JMS变得有点太重了。正如我所说:“如果这是一个严肃的项目”,这意味着:如果您需要所有常见的东西,如防止丢失消息、重复消息、事务等。