韩漫免费漫画在线观看方法,《好好疼爱里面》免费看,年轻漂亮的女士护士内衣,妈妈醉酒后把我当爸爸电视剧

文章 > java基础 > java PriorityBlockingQueue出队方法

java PriorityBlockingQueue出队方法

java PriorityBlockingQueue出队

头像

小妮浅浅

2021-02-07 17:51:243260浏览 · 0收藏 · 0评论

本教程操作环境:windows7系统、java10版,DELL G3电脑。

1.出队过程

1)加锁;

2)判断是否出队成功,未成功就阻塞在notEmpty条件上;

3)出队时弹出堆顶元素,并把堆尾元素拿到堆顶;

4)再做自上而下的堆化;

5)解锁;

2.出队方法

出队方法有 poll(), take(), poll(long timeout, TimeUnit unit),peek()

poll 和 peek 与之前类似,这里不做说明。

public E take() throws InterruptedException {
    //获取锁,可被中断
    final ReentrantLock lock = this.lock;
    lock.lockInterruptibly();
    E result;
    try {
        //如果队列为空,则阻塞,把当前线程放入notEmpty的条件队列
        while ( (result = dequeue()) == null)
            notEmpty.await();//阻塞当前线程
    } finally {
        lock.unlock();//释放锁
    }
    return result;
}
private E dequeue() {
    int n = size - 1;
    if (n < 0)
        return null;
    else {
        Object[] array = queue;
        E result = (E) array[0];// 弹出堆顶元素
        E x = (E) array[n];// 把堆尾元素拿到堆顶
        array[n] = null;
        Comparator<? super E> cmp = comparator;
        if (cmp == null)//自上而下的堆化
            siftDownComparable(0, x, array, n);
        else
            siftDownUsingComparator(0, x, array, n, cmp);
        size = n;
        return result;
    }
}
private static <T> void siftDownComparable(int k, T x, Object[] array,
                                           int n) {
    if (n > 0) {
        Comparable<? super T> key = (Comparable<? super T>)x;
        int half = n >>> 1;           
        // 只需要遍历到叶子节点就够了
        while (k < half) {
            // 左子节点
            int child = (k << 1) + 1; 
            // 左子节点的值
            Object c = array[child];
            // 右子节点
            int right = child + 1;
            // 取左右子节点中最小的值
            if (right < n &&
                ((Comparable<? super T>) c).compareTo((T) array[right]) > 0)
                c = array[child = right];
            // key如果比左右子节点都小,则堆化结束
            if (key.compareTo((T) c) <= 0)
                break;
            // 否则,交换key与左右子节点中最小的节点的位置
            array[k] = c;
            k = child;
        }
        // 找到了放元素的位置,放置元素
        array[k] = key;
    }
}

以上就是java中PriorityBlockingQueue的出队方法,一般而言我们都是使用take方法进行处理,其它的解决办法,大家也可以在课后进行了解。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

《打烊后仅剩的沙龙樱花片尾曲》 | 欧美大妈LOGO大全及价格图| 9.1短视全免费| 小寡妇在线观看免费播放电视剧 | 《妻欲公与媳》免费看| 18岁的少女与狗高清电视剧| 老公不在小叔子当老公| 人狗大战5高清正版免费观看| 100种双人插画姿势素材| 欧洲人与动物胶配方大全图片| 朋友的母亲中字ID| 门卫老头吮她的花蒂的主演是谁| 妈妈叫我戴上避孕套是什么歌| 大战尼姑2高清免费观看| 合欢椅BY春风凤弯椅小说| 《完美邻居2》电影在线观看| 阴部按摩出水太尴尬怎么办| 小峡子边喂奶边和我做爰| 少女配狗视频大全播放| 《艳妻互换》完整版| 欧美| 皇上被群臣扒开腿狂C| B站夫妻进入高峰期需要多久| 香车美人| 医生一直揉白带湿漉漉的正常吗| 男人吃过女人乳房后会断联吗| 公交车上荫蒂添的好舒服H漫画 | 《妻子为丈夫升职》| 成品人和精品人的区别在哪里知乎| 女被扒开腿狂躁XXXXX视频| 驻站多少集| 双人床上剧烈运动会越睡越累吗| 小峡子边喂奶边和我做爰| 《法国空乘9》| 圆滚滚的大扔子视频在线观看 | 第-次和公翁做爰又大又粗| 1.120分钟免费观看电视剧大全| 《帐篷里的秘密》动漫| YSL水蜜桃86满十八岁会黑吗.| 天堂草原高清在线观看电视剧 | 舌头底下舔着有小硬疙瘩视频