阻塞队列一共有四种方式的队列,他们分别是:
1.ArrayBlookingQueue
ArrayBlookingQueue 是一个有边界的阻塞队列,他的内部实现是一个数组,有边界的意思是他的容量是有限的.我们必须在其初始化的时候指定他的容量大小,容量大小一旦指定就不可以改变
ArrayBlookingQueue 是以先进先出的范式存储数据,最新插入的对象是尾部,最新移除的对象是头部.
例子:
<String> arrays =new ArrayBlookingQueue<string>(3);
arrays.add("李四");
arrays.add("张军");
arrays.add("张军");
arrays.offer("张三",1,TimeUnit.SECONDS);
· LinkedBIockingQueue
2.LinkedBlockingQueue
LinkedBlockingQueue阻塞队列大小的配置是可选的,如果我们初始化是指定一个大小,他就是有边界的.如果不指定,他就是无边界的,说是无边界,其实是采用了默认大小为Interger,MAX VALUE 的容量,它内部不实现是一个链表.
LinkedBlockingQueue也是先进先出的方式存储数据
例子:
LinkedBlockingQueue linkedBlockingQueue =new LinkedBlockingQueue(3);
linkedBlockingQueue.add("张丹");
linkedBlockingQueue.add("李四");
linkedBlockingQueue.add("李四");
System.out.printIn(linkedBlockingQueue.size());
3.PriorityBlockingQueue
PriorityBlockingQueue是一个没有边界的队列.他的排序规则和java.util.prioptyQueue一样,需要注意,PriorityBlockingQueue中允许插入null对象
所有插入PriorityBlockingQueue的对象必须实现java.lang.Comparable 接口,队列优先级的排序规则就是按照我们对这个接口的实现来定义的.
另外,我们可以从PriorityBlockingQueue活的一个迭代器Itertor,但这个迭代器并不保证按照优先级顺序进行迭代.
4.SynchronousQueue
SynchronousQueue队列内部仅允许容纳一个元素,当一个线程插入一个元素后会被阻塞,除非这个元素被另一个线程消费.
当下次运行只有stop或手动为死亡,否则将会返回就绪.