LinkedBlockingQueue和arrayBlockingQueue
时间: 2023-11-30 17:08:20 浏览: 171
linkedblockingqueue
LinkedBlockingQueue和ArrayBlockingQueue是Java中两种常用的线程安全的队列实现。
LinkedBlockingQueue是一个基于链表的有界阻塞队列,它实现了BlockingQueue接口。它的特点是可以选择指定容量,如果不指定容量则默认为Integer.MAX_VALUE。它采用了可选的公平策略,即按照请求的顺序分配线程执行任务。在并发环境下,LinkedBlockingQueue使用了两个锁来实现添加和移除操作的互斥,因此在高并发场景下性能较好。
ArrayBlockingQueue是一个基于数组的有界阻塞队列,同样也实现了BlockingQueue接口。它的容量是固定的,需要在创建时指定,并且不支持扩容。ArrayBlockingQueue在内部通过一个可重入锁来实现线程安全。它采用的是公平策略,因此线程会按照请求的顺序执行任务。
两者之间的主要区别在于底层数据结构和实现方式。LinkedBlockingQueue使用链表来存储元素,在插入和删除操作上具有较高的效率,但是在内存占用上会相对较高。ArrayBlockingQueue使用数组来存储元素,在插入和删除操作上效率相对较低,但是在内存占用上相对较小。
选择使用哪种队列取决于具体的应用场景和需求。如果需要一个可变大小的队列,并且对性能要求较高,可以选择LinkedBlockingQueue。如果需要一个固定大小的队列,并且对内存占用有限,可以选择ArrayBlockingQueue。
阅读全文