JDK 6的LinkedBlockingQueue替代方案

时间:2013-01-09 12:37:20

标签: java threadpoolexecutor

我正在使用LinkedBlockingQueue作为我的threadPool

new ThreadPoolExecutor(20, 
                       21, 
                       10,
                       TimeUnit.SECONDS, 
                       new LinkedBlockingQueue<Runnable>())

我遭受内存泄漏Bug(内存中充满了LinkedBlockingQueue节点,逐渐减慢),这在JDK 7中得到修复。

我现在不想改变运行时环境或我的JDK。

LinkedBlockingQueue没有大小限制,与BlockingQueue Interface的其他实现不同。你能建议一个替代队列吗?

2 个答案:

答案 0 :(得分:4)

你链接到的修复bug-id也被反向移植到Java 6.自Java 6 Update 19以来已在Java 6中修复,请参阅http://bugs.sun.com/view_bug.do?bug_id=2186685(这个是关于你引用的bug的BTW链接)。

答案 1 :(得分:2)

ArrayBlockingQueue由固定大小的数组支持。

PriorityBlockingQueue - 它是一个无界阻塞,优先级队列的元素按照它们的自然顺序排序,或者由队列构建时提供的比较器排序。