【发布时间】:2012-08-25 18:28:12
【问题描述】:
对于我正在开发的日志记录功能,我需要一个处理线程来等待作业,并在计数达到或超过一定数量时分批执行它们。由于这是生产者消费者问题的标准案例,我打算使用BlockingQueues。我有许多生产者使用 add() 方法将条目添加到队列中,而只有一个消费者线程使用 take() 来等待队列。
LinkedBlockingQueue 似乎是一个不错的选择,因为它没有任何大小限制,但是我很困惑从文档中阅读此内容。
链接队列通常比基于数组的队列具有更高的吞吐量,但在大多数并发应用程序中的性能难以预测。
并没有清楚地解释这句话的含义。有人可以照亮它吗?这是否意味着 LinkedBlockingQueue 不是线程安全的?你们有没有人在使用 LinkedBlockingQueue 时遇到过任何问题。
由于生产者的数量要多得多,我总是会遇到这样一种情况,即队列被大量要添加的条目压得喘不过气来。如果我改用ArrayBlockingQueue,它将队列的大小作为构造函数中的参数,我总是会遇到与容量满相关的异常。为了避免这种情况,我不确定如何确定我应该用什么大小来实例化我的 ArrayBlockingQueue。您是否必须使用 ArrayBlockingQueue 解决类似的问题?
【问题讨论】:
标签: java concurrency producer-consumer blockingqueue