• 技术文章 >java >java基础

    ArrayBlockingQueue在java的入队

    小妮浅浅小妮浅浅2021-01-11 13:48:11原创2166

    关于队列我们知道是的,有往里面加入的叫入队。在java中我们需要借助一些简单的函数来实现:add、offer、put、offer。这里我们先对ArrayBlockingQueue入队的流程做一个简单的介绍,帮助大家理清入队的原理。然后再进一步带来不同函数的入队方法,一起来看看操作方法。

    1.入队流程

    构造一个长度为 6 的环形数组:

    (1)刚刚开始构造完毕时,插入索引和取出索引都在同一个位置,数组内值为空

    (2)将元素 A 进行入队操作。元素 A 入队后,取出值的索引不会变化,但是入队索引会偏移到下一个位置

    (3)继续进行入队操作,直到 putIndex 索引指向最后一个位置

    (4)将元素 F 进行入队,我们会看到,putIndex 索引和 takeIndex 索引,又到回了初始时的位置,这就是上面说的环形队列,此时如果再有线程进行入队操作时,线程便会堵塞,直到元素被消费。

    2.入队方法

    入队有四个方法,它们分别是add、offer、put、offer,就其中两种带来介绍。

    (1)add 方法

    //添加元素到队尾
    public boolean add(E e) {
            //调用父类的方法
            return super.add(e);
        }
    //父类的添加方法
     public boolean add(E e) {
            //实质是调用offer方法
            if (offer(e))
                return true;
            else
                throw new IllegalStateException("Queue full");
        }

    (2)put 方法

    //添加制定元素到队尾,如果队列满了一直等待队列有元素出队
    public void put(E e) throws InterruptedException {
            checkNotNull(e);
            //上锁
            final ReentrantLock lock = this.lock;
            lock.lockInterruptibly();
            try {
                while (count == items.length)
                    //while循环,如果队列满了一直等待
                    notFull.await();
                //队列还有空间,调用enqueue方法入队
                enqueue(e);
            } finally {
                //释放锁资源
                lock.unlock();
            }
    }

    以上就是ArrayBlockingQueue在java的入队方法,在队里还有空间的情况下,确定新的元素加入其中,学会后就可以试试ArrayBlockingQueue的入队方法,同时也可以找寻一些其他函数方法的资料。

    专题推荐:java arrayblockingqueue入队
    上一篇:java ArrayBlockingQueue源码探讨 下一篇:java中ArrayBlockingQueue的出队

    相关文章推荐

    • java线程池的运行流程• java线程池创建方式• java线程池异常的处理方法• java线程池的工作队列有哪几个• BlockingQueue在java中的使用• java中ArrayBlockingQueue的使用• java ArrayBlockingQueue源码探讨

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网