BlockingQueue解析

BlockingQueue其实就是阻塞队列,是基于阻塞机制实现的线程安全的队列。

BlockingQueue不同于普通的Queue的区别主要是:

  1. 通过在入队和出队时进行加锁,保证了队列线程安全
  2. 支持阻塞的入队和出队方法:当队列满时,会阻塞入队的线程,直到队列不满;当队列为空时,会阻塞出队的线程,直到队列中有元素。

支持4种方法

BlockingQueue解析_第1张图片

BlockingQueue的5种实现类

BlockingQueue解析_第2张图片

ArrayBlockingQueue阻塞实现

    public void put(E e) throws InterruptedException {
        checkNotNull(e);
        final ReentrantLock lock = this.lock;
        // 加锁
        lock.lockInterruptibly();
        try {
            while (count == items.length) {
              // 如果队列已满,线程阻塞,并添加到notFull条件队列中等待唤醒
              notFull.await();
            }
            // 如果队列未满,则调用enqueue方法进行入队操作
            enqueue(e);
        } finally {
            // 释放锁
            lock.unlock();
        }
    }

你可能感兴趣的:(java,开发语言)