线程安全的队列

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,对其的操作必须是放和取交替完成的

 

posted @ 2019-10-25 15:39  踏月而来  阅读(1680)  评论(0编辑  收藏  举报