java双端队列作用 java三种队列详解

LinkedBlockingQueue概述LinkedBlockingDeque是由链表组成的可选双端阻塞队列,支持O(1)的时间复杂度从两端插入和移除元素。如果没有指定边界,它是整数。MAX_VALUE。同步由ReentrantLock保证,等待通知通过使用条件实现。类别结构和重要字段公共类LinkedBlockingDeque & ltE...

LinkedBlockingQueue概述

LinkedBlockingDeque是由链表组成的可选双端阻塞队列,支持O(1)的时间复杂度从两端插入和移除元素。如果没有指定边界,它是整数。MAX_VALUE。

同步由ReentrantLock保证,等待通知通过使用条件实现。

类别结构和重要字段

公共类LinkedBlockingDeque & ltE & gt扩展AbstractQueue & ltE & gt实现阻塞请求& ltE & gt,Java . io . serializable { private static final long serialVersionUID =-387911632671998426 l;/* *双向链表节点*/静态最终类节点<>linkFirst

在尝试将节点添加到first之前,先进行更新,如果插入后超出了容量,则返回false。

private boolean linkFirst(Node<E> node) { // assert lock.isHeldByCurrentThread(); if (count >= capacity) return false; Node<E> f = first; node.next = f; first = node; if (last == null) last = node; else f.prev = node; ++count; notEmpty.signal(); return true; }

linkLast

在最后一个节点后添加节点node以更新最后一个节点。如果插入后超出了容量,则返回false。

private boolean linkLast(Node<E> node) { // assert lock.isHeldByCurrentThread(); if (count >= capacity) return false; Node<E> l = last; node.prev = l; last = node; if (first == null) first = node; else l.next = node; ++count; notEmpty.signal();// 满足notEmpty条件 return true; }

unlinkFirst

移除第一个节点并返回其项目值,如果队列为空,则返回full。

private E unlinkFirst() { // assert lock.isHeldByCurrentThread(); Node<E> f = first; if (f == null) return null; Node<E> n = f.next; E item = f.item; f.item = null; f.next = f; // help GC first = n; if (n == null) last = null; else n.prev = null; --count; notFull.signal();// 满足notFull条件 return item; }

unlinkLast

移除最后一个节点并返回其项目值,如果队列为空,则返回full。

private E unlinkLast() { // assert lock.isHeldByCurrentThread(); Node<E> l = last; if (l == null) return null; Node<E> p = l.prev; E item = l.item; l.item = null; l.prev = l; // help GC last = p; if (p == null) first = null; else p.next = null; --count; notFull.signal(); // 满足notFull条件 return item; }

取消链接

移除任何节点。注意,这里没有操作X本身的连接,因为它可能仍然被迭代器使用。

void unlink(Node<E> x) { // assert lock.isHeldByCurrentThread(); Node<E> p = x.prev; Node<E> n = x.next; // 移除的是first if (p == null) { unlinkFirst(); // 移除的是last } else if (n == null) { unlinkLast(); } else { // 移除的是中间节点 p.next = n; n.prev = p; x.item = null; // Don't mess with x's links. They ***y still be in use by // an iterator. // 这里x的prev和next指针都没有改变,因为他们可能在被iterator使用 --count; notFull.signal(); } }

摘要

LinkedBlockingDeque是由链表组成的可选双端阻塞队列,支持O(1)的时间复杂度从两端插入和移除元素。如果没有指定边界,它是整数。MAX_VALUE。

同步由ReentrantLock保证,等待通知通过使用条件实现。

上面描述的所有操作基本都是核心方法,比如putFirst、putLast、takeFirst、takeLast等方法都会调用上面的核心方法,实现上面的就比较简单了,也就是双端链表的基本操作。如果不明白,可以画图帮助理解。

本文来自MR.特别人士投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/475918.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 03-26
下一篇 03-26

相关推荐

  • 生茶和熟茶有什么作用区别

    1、普洱生茶和熟茶的区别和功效,很多人都爱喝茶,但是茶的种类实在是太多了,刚入门喝茶的茶友可能分不清的就是生普洱和熟普洱的区别了,这两种茶汤看似是很像的,下面就为大家分享普洱生茶和熟茶的区别和功效,我们一起来看看吧 普洱生茶。2、生茶富含茶多酚,性属清凉,有

    2023-07-29 10:17:01
    892 0
  • 什么是网站,带你了解网站的功能和作用

    网站是什么?网址是什么?抛开技术术语,网站是人机交流的工具。它由三部分组成,即网站三要素、域名、空和源文件。它们共同构成了一个可以浏览和使用的网站。网站的源文件有哪些?网站源文件包含网页的设计、前端代码、后台程序、网站数据等。网站空房间是做什么用的?网站空

    2023-07-29 07:41:02
    763 0
  • 游泳健身的好处和注意事项(每天游泳500米有健身作用吗)

    游泳可以作为一种锻炼,也可以作为一种娱乐。休闲游泳也能起到锻炼的作用,但达不到强身健体的效果。把游泳作为一种锻炼方式可以帮助你保持好身材或者减肥。在水中,你会发现一种不同于在健身器材上锻炼的阻力。游泳不会像有氧运动那样让你出汗。在相同运动量的情况下,你可以

    2023-07-28 16:28:01
    910 0
  • 电脑键盘各个按键功能和作用 电脑键盘的作用以及功能

    如今,电脑是日常生活和办公的必需品,我们也需要熟练的电脑技能来使我们使用起来更加方便。本文介绍了电脑输入键盘上英文键的作用,废话不多说。先从下面的介绍开始。1.Esc:取消并退出(例如,当电脑全屏观看视频时,Esc会全屏退出)2.滚动锁定:滚动到打开中间区域的键。3.选项

    2023-07-28 14:26:01
    909 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信