区别 | ArrayBlockingQueue | LinkedBlockingQueue |
是否有界 | 不可扩容,有界 | 可有可无,最大值Integer.Max,无界时注意防止内存溢出 |
gc | 采用的是数组的存储容器,因此在插入或删除元素时不会产生或销毁任何额外的对象实例 | 长时间内需要高效并发地处理大批量数据的时,对于GC可能存在较大影响 |
锁 | 即添加操作和移除操作采用的同一个ReenterLock锁 | LinkedBlockingQueue实现的队列中的锁是分离的,能大大提高队列的吞吐量 |
缓存行 | 可以使用,存在伪共享 | 链表不使用连续地址,无法使用缓存行 |
参考文章:高性能队列——Disruptor