美文网首页
BlockingQueue阻塞队列

BlockingQueue阻塞队列

作者: Gorden_Tam | 来源:发表于2018-10-16 15:37 被阅读0次

一.ArrayBlockingQueue

  1. 简介:
  1. 成员变量:
    final Object[]items;
    int putIndex;//下一个被放入的元素的位置
    int takeIndex;//下一个去除元素的位置
    int count;
    final reentrantLock lock;
    private Condition notEmpty;
    private Condition notFull;

  2. add,offer,put为插入方法,add当队列满时,抛出IllegalStateException.
    Offer当队列满时立即返回false。Put当队列满时,会进入等待,只要不被中断,就会插入数据到队列中。会阻塞,响应中断。

    不能插入空对象,每次插入时都会执行判断,如对象为空,则抛出空指针异常。
    3)主要方法:
    Private void enqueuer(E x){
    Final Object[]items=items;
    Items[putIndex]=x;
    If(++putIndex==items.length)//
    putIndex=0;
    count++;
    notEmpty.signal();//每次插入后,都会执行notEmpty.signal,将会唤醒take线程队列中的第一个线程。
    }
    Private void dequeue(){
    Final Object[]items=items;
    E x=items[takeIndex];
    Items[takeIndex]=null;
    If(++takeIndex==item.length)//插入和删除都是从按顺序插入删除,当下标到最后一位时,从头开始插入删除(相当于循环)。
    takeIndex==0;
    notFull.signal();
    }
    Add():调用offer,将元素插入到队列。如果队列满则抛出IllegalStateException
    Offer():不支持中断,队列满时立即返回false。

Put():当队列满时,阻塞,支持中断
Public void put(E e)throws InterruptedException{
checkNotNull(e);
final ReentrantLock lock=this.lock;
lock.IockInterruptibly();
try{
while(count==items.length)//当队列满的时候,该线程进入阻塞状态。
notFull.await();
enqueuer(e)
}
}

Take():当队列为空时,阻塞,响应中断
Public E take() throws InterruptedException{
Final ReentractLock lock=this.lock;
lock.IockInterruptibly();
try{
while(count==0)
notEmpty.await();
return dequeue();
}finally{
Lock.unlock();
}
}

相关文章

  • 26. 并发终结之BlockingQueue

    线程池里面最重要的还有个并发容器,即阻塞队列BlockingQueue。BlockingQueue是阻塞队列的接口...

  • 阻塞队列 BlockingQueue

    阻塞队列 BlockingQueue BlockingQueue用法 BlockingQueue 通常用于一个线...

  • Java并发编程:阻塞队列

    Java并发编程:阻塞队列BlockingQueue 以上7类阻塞队列中有LinkedBlockingQueue,...

  • 探讨阻塞队列和线程池源码

    阻塞队列 非阻塞队列是一个先进先出的单向队列(Queue),而BlockingQueue阻塞队列实际是非阻塞队列的...

  • Android中的线程与线程池

    阻塞队列BlockingQueue 阻塞队列常用于生产者——消费者模型,生产者往阻塞队列插入数据,消费者往阻塞队列...

  • 阻塞队列

    BlockingQueue线程池的数据结构是阻塞队列BlockingQueue。(在多线程领域:所谓阻塞,在某些情...

  • Java并发-22.阻塞队列

    阻塞队列(BlockingQueue)是一种支持两个附加操作的队列: 支持阻塞的插入:队列满时,队列阻塞插入元素的...

  • 阻塞队列

    阻塞队列BlockingQueue不支持插入null元素,好好了解一下阻塞队列接口设计。 了解阻塞队列的接口方法后...

  • Java并发包之BlockingQueue

    一、什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻...

  • 19-阻塞队列之ArrayBlockingQueue

    Java中的阻塞队列 什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附...

网友评论

      本文标题:BlockingQueue阻塞队列

      本文链接:https://www.haomeiwen.com/subject/zaeboftx.html