Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue
BlockingQueue是一个接口, 继承Queue接口,Queue接口继承 Collection
BlockingQueue的方法
其中add 和remove方法会抛出异常,一般使用后面两组方法
BlockingQueue的实现类
ArrayBlockingQueue
DelayQueue
LinkedBlockingQueue
PriorityBlockingQueue
SynchronousQueue
ArrayBlockingQueue:由数组实现的有界阻塞队列,其中元素以FIFO(先入先出)顺序排序,其构造函数必须带一个int参数来指明其大小,可选参数fair(布尔)决定在多线程抢占时是否使用公平锁
LinkedBlockingQueue:由链表实现的阻塞队列,其中元素以FIFO(先入先出)顺序排序,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定
PriorityBlockingQueue:无界的阻塞队列,其所含对象的排序不是FIFO而是依据对象的自然排序顺序或者是构造函数的Comparator决定的顺序
SynchronousQueue:特殊的BlockingQueue,对其的操作必须是放和取交替完成的