【发布时间】:2010-10-26 08:25:32
【问题描述】:
使用 ConcurrentLinkedQueue 时,如何限制队列的大小。是否有可能通过内存不足异常?
【问题讨论】:
标签: java queue out-of-memory
使用 ConcurrentLinkedQueue 时,如何限制队列的大小。是否有可能通过内存不足异常?
【问题讨论】:
标签: java queue out-of-memory
ConcurrentLinkedQueue 的大小是无限的,所以如果生产者放入物品的速度快于消费者取出物品的速度,最终它确实会吃掉你的记忆。如果要限制队列的大小,请尝试使用阻塞队列,例如 LinkedBlockingQueue 或 ArrayBlockingQueue。第一个的大小可以有选择地有界,而第二个总是有界的。
【讨论】:
BlockingQueue 实现都是线程安全的,正如the API docs 中所声明的那样。
我在这方面有点晚了,但是你总是可以设置一个上限,当超过时,你的方法将消耗一个令牌来为下一个腾出空间,依此类推。
【讨论】: