ArrayBlockingQueue 和 LinkedBlockingQueue 对比
ArrayBlockingQueue和LinkedBlockingQueue都支持blockingQueue的概念,就存取block,可以说两者很相像,那么具体有哪些区别呢?
内部存储
- ArrayBlockingQueue 内部是实例化一个Object数组来存储
- LinkedBlockingQueue 内部是一个内部静态类Node,维护本身的内容和next一个link.
容量和性能
这里做了简单的测试,和看了源码和相关作者回复的邮件。
占用内存来讲。从表面来看,array会小一点,Node比较大一点。但是作者说只有不太会array比node的可能。只有在array超过1/2, 1/3的时候才可能出现。
性能。在源码注释中,提到ArrayBlockingQueue支持一个是否对wait的线程进行排序,然后FIFO,这个有点消耗,但默认是没有这个工作的。然后在LinkedBlockingQueue中说Linked based queues经常会比array based queues性能高一点,但是不像array那样容易预测结果。然后ArrayBlockingQueue中维护一个锁,LinkedBlockingQueue中维护两个锁,这样Linked阻塞的次数会减少,从而性能更高。