arrayblockingqueue详解
时间: 2023-04-16 10:02:56 浏览: 74
ArrayBlockingQueue是Java中的一个阻塞队列,它是一个有界的队列,底层是由数组实现的。它的特点是先进先出,支持多线程并发访问,可以保证线程安全。当队列满时,插入操作会被阻塞,直到队列中有空闲位置;当队列为空时,获取操作会被阻塞,直到队列中有元素。ArrayBlockingQueue提供了多种构造方法,可以指定队列的容量和是否公平地进行访问。在使用ArrayBlockingQueue时,需要注意避免出现死锁和饥饿等问题。
相关问题
ArrayBlockingQueue
ArrayBlockingQueue是一个阻塞式的队列,底层以数组的形式保存数据。它的元素访问可以是公平的或非公平的。对于公平访问队列,被阻塞的线程可以按照阻塞的先后顺序访问队列。而非公平队列,当队列可用时,阻塞的线程将进入争夺访问资源的竞争中,谁先抢到谁就执行,没有固定的先后顺序。创建公平与非公平阻塞队列的代码如下:
//默认非公平阻塞队列
ArrayBlockingQueue queue = new ArrayBlockingQueue(2);
//公平阻塞队列
ArrayBlockingQueue queue1 = new ArrayBlockingQueue(2,true)
ArrayBlockingQueue提供了常用的操作,包括add,offer,put,remove,poll,take,peek等方法。其中,peek方法返回当前队列的头元素但不删除任何元素。
LinkedBlockingQueue是一个由链表实现的有界队列阻塞队列,默认大小为Integer.MAX_VALUE。它的构造函数可以手动传入大小值,避免队列过大造成机器负载或内存爆满等情况。LinkedBlockingQueue也提供了常用的操作,类似于ArrayBlockingQueue。
总结来说,ArrayBlockingQueue和LinkedBlockingQueue都是阻塞队列,但底层实现不同,一个是数组,一个是链表。它们的使用方式和特点略有不同,具体选择哪个取决于具体的需求和场景。
arrayblockingqueue
ArrayBlockingQueue是Java并发编程中的一种阻塞队列,它内部使用数组实现。它提供了两种获取元素的方式,一种是获取并移除队列头部的元素,另一种是获取但不移除队列头部的元素。当队列为空或者满时,获取和插入操作会被阻塞。