java - [Java] : Which kind of queue to use for my scenario?

标签 java queue

我对java完全陌生,但我迫切需要创建一个队列和线程。我很困惑必须使用哪个队列类。

这是场景:

我需要一个线程来处理来自应用程序层的用户事件以及来自较低中间件层的回调事件。 为此,决定维持队列。 每当用户事件或回调事件发生时,事件都会被发布到此队列。 该线程轮询队列中的事件并采取适当的操作。 相同的队列可以由不同的类(即应用层和底层)写入。因此,哪个队列更安全,可以确保同一位置不会被不同的类同时写入?

此外,Queue、BlockingQueue 和 ArrayBlockingQueue 之间的基本一句话区别是什么?在什么场景下必须选择它们?

问候, 琪琪

最佳答案

在您列出的三个中,唯一实际上是一个类的是 ArrayBlockingQueue。阻塞队列与普通队列的不同之处在于,如果一个对象尝试删除前面的项目,它将暂停执行,直到有可用的项目可以删除。

“BlockingQueue”和“Queue”只是一个接口(interface);你不能实例化它们。可以实例化的BlockingQueue类型有ArrayBlockingQueue、LinkedBlockingQueue等。

就我个人而言,我会为此应用程序使用 LinkedBlockingQueue - 使用链表的优点是没有设置最大容量,并且内存使用量随着队列缩小而减少。

关于java - [Java] : Which kind of queue to use for my scenario?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3994164/

相关文章:

java - 在 Java 中停止 MouseMoved 事件

java - 如何处理有两个相同单词的行

python - 从队列中获取最后 n 个项目

java - 如何在java中的线程之间传递整数/其他变量?

java - 结果集到数组

java - 将 .java 转换为 .smali

java - 反转 Queue<Integer> 并将其转换为 int 数组

c++ - std::deque 和多线程访问

c# - 线程队列进程

c# - C# 中的持久工作队列