【发布时间】:2011-07-06 16:43:37
【问题描述】:
所以我在生产者/消费者类型的应用程序中使用固定大小的 BlockingQueue [ArrayBlockingQueue],但我希望用户能够即时更改队列大小。问题是没有允许在创建后更改容量的 BlockingQueue 实现。以前有人遇到过这个吗?有什么想法吗?
【问题讨论】:
标签: java concurrency blockingqueue
所以我在生产者/消费者类型的应用程序中使用固定大小的 BlockingQueue [ArrayBlockingQueue],但我希望用户能够即时更改队列大小。问题是没有允许在创建后更改容量的 BlockingQueue 实现。以前有人遇到过这个吗?有什么想法吗?
【问题讨论】:
标签: java concurrency blockingqueue
最明显的解决方案(根据您的情况可能合适,也可能不合适)是简单地实例化一个 new 队列,其中包含您想要的更新容量。然后将旧队列中的所有内容推送到新队列中。
【讨论】:
您可以扩展 LinkedBlockingQueue。它的限制是一个软限制(即只是一个额外的检查),你可以做一些你可以改变的事情(通过禁用内置的并放入你自己的)
【讨论】:
LinkedBlockingQueue 是非常不切实际的。
offer() 和put(),这些都不是最终的。
LinkedBlockingQueue 中队列接口实现的所有访问和操作函数都使用private final int capacity 字段,而且整个锁定机制都保存在私有函数中,必须重新实现。你基本上会重写大部分课程。