多线程--阻塞队列

阻塞队列一共有四种方式的队列,他们分别是:

1.ArrayBlookingQueue 

ArrayBlookingQueue 是一个有边界的阻塞队列,他的内部实现是一个数组,有边界的意思是他的容量是有限的.我们必须在其初始化的时候指定他的容量大小,容量大小一旦指定就不可以改变

ArrayBlookingQueue 是以先进先出的范式存储数据,最新插入的对象是尾部,最新移除的对象是头部.

例子:

 arrays =new ArrayBlookingQueue(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队列内部仅允许容纳一个元素,当一个线程插入一个元素后会被阻塞,除非这个元素被另一个线程消费.

 

多线程--阻塞队列_第1张图片

多线程--阻塞队列_第2张图片

当下次运行只有stop或手动为死亡,否则将会返回就绪.

多线程--阻塞队列_第3张图片

你可能感兴趣的:(多线程--阻塞队列)