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