阻塞队列与普通队列

Java队列:

掌握 Java 队列相关知识

在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能非阻塞队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪一种都继承了Queue。

只要是队列就遵循先进先出,后进后出原则。

  1. ArrayDeque 数组双端队列
  2. PriorityQueue 优先级队列
  3. ConcurrentLinkedQueue 基于链表的并发队列
  4. DelayQueue 延期阻塞队列
  5. ArrayBlockingQueue 基于数组的并发阻塞队列
  6. LinkedBlockingQueue 基于链表的FIFO阻塞队列
  7. LinkedBlockingDeque 基于链表的FIFOs双端阻塞队列
  8. PriorityBlockingQueue 带优先级的无界阻塞队列
  9. SynchronousQueue 并发同步阻塞队列
    字典
    FIFO :先进先出
    LIFO :后进先出

阻塞队列是与普通队列的区别:

阻塞队列是与普通队列的区别有两点:
1、取出元素:
阻塞队列:阻塞队列获取元素时,若队列为空,则会等待队列有元素,不然就阻塞队列。
普通队列:普通队列返回结果,无元素。
2、插入元素:
阻塞队列:阻塞队列放入元素时,若是队列满,则等待队列,直到有空位置,而后插入。
普通队列:普通队列有两种情况,一是直接扩容,二是直接没办法插入,不阻塞。

阻塞队列特点:

  1. 阻塞队列是一种可以在多线程环境下使用的队列,支持阻塞等待的队列,多线程可以安全访问的队列。
  2. 支持生产与消费等待,当队列为空的时候,消费线程会阻塞,等到队列不为空。当队列满了的时候,生产线程会阻塞,直到队列不满。
  3. 阻塞队列的最佳使用场景就是生产者与消费者,使用时无需判断有没有元素直接获取并处理,相对的普通队列就得判断有没有元素才能处理。

延伸——加深印象:

试图向一个已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,系统将等待,在元素变得可用之前一直等待。
这里提到的“等待”并不是线程的wait 而是 Lock锁,当满足条件时会 unLock 解锁,当然有些方法也可以在调用的时候设置超时时间。

你可能感兴趣的:(Java基础知识,java,阻塞队列,队列)