首页 > 其他分享 >LinkedBlockingDeque介绍

LinkedBlockingDeque介绍

时间:2023-04-05 21:55:55浏览次数:35  
标签:linkedBlockingDeque 队列 元素 介绍 添加 取取 移除 LinkedBlockingDeque

//        有一个内部类 final class Node<E> ,
//        用于包装每个节点的数据。另外有成员属性
//        Node<E> first,Node<E> last,
//        当前拥有元素数量int count ,容量 int capacity;
//        E item 当前节点数据
//        Node<E> prev  指向当前节点前驱节点的地址
//        Node<E> next  指向当前节点下个节点的地址

//        LinkedBlockingDeque 是基于链表的双端阻塞队列,线程安全,元素不允许为 null。
//
//        空间容量最大一般为Integer.MAX_VALUE,如果构造器中指定了最大值则队列长度将会被限制在该值以下。
//
//        大部分方法都以固定时间运行,批量操作,例如:remove, removeFirstOccurrence,removeLastOccurrence,contains,iterator.remove(),将以线性时间运行。
//
//        LinkedBlockingDeque 是阻塞队列,是指对于一些指定的操作,在插入或者获取队列元素时如果队列状态不允许该操作可能会阻塞住该线程直到队列状态变更为允许操作,这里的阻塞一般有两种情况。
//
//        第一种是插入元素时,如果当前队列已满将会进入阻塞状态,一直等到队列有空的位置时再讲该元素插入,该操作可以通过设置超时参数,超时后返回 false 表示操作失败,也可以不设置超时参数一直阻塞,中断后抛出InterruptedException异常。
//
//        第二种是读取元素时如果当前队列为空会阻塞住直到队列不为空然后返回元素,同样可以通过设置超时参数。
        /**
         *      Number of items in the deque  队列内元素数量
         *      private transient int count;
         *
         *      Maximum number of items in the deque 队列内最大容量
         *      private final int capacity;
         *
         *     Main lock guarding all access   全局锁
         *     final ReentrantLock lock = new ReentrantLock();
         *
         *      Condition for waiting takes   取锁
         *     private final Condition notEmpty = lock.newCondition();
         *
         *     Condition for waiting puts   存锁
         *     private final Condition notFull = lock.newCondition();
         */
        LinkedBlockingDeque linkedBlockingDeque = new LinkedBlockingDeque();
        //初始化容量的队列
//        LinkedBlockingDeque linkedBlockingDeque = new LinkedBlockingDeque(10);
        //初始化集合的队列  集合元素不可为空
//        LinkedBlockingDeque linkedBlockingDeque = new LinkedBlockingDeque(new ArrayList());

        //添加添加添加添加添加添加添加添加
        //添加添加添加添加添加添加添加添加
        // 添加添加添加添加添加添加添加添加
        //添加添加添加添加添加添加添加添加
        //放入队列后面 元素为空或者队列满了,抛出异常
        linkedBlockingDeque.add();
        //存入一个集合到队列,元素不可为空否则抛出异常,把自己添加进来也抛入异常
        linkedBlockingDeque.addAll();
        //非阻塞放入队列的第一个位置,满了抛出异常
        linkedBlockingDeque.addFirst();
        //非阻塞放入队列的最后一个位置,满了抛出异常
        linkedBlockingDeque.addLast();


        //从队头写入元素,如果队列已满,抛出异常IllegalStateException("Deque full")
        linkedBlockingDeque.push();
        //向队首阻塞式插入元素,如果队列未满则插入,如果队列已满,
        // 则阻塞当前线程直到队列为空闲,或者元素被其他线程取出。
        // 如果线程在阻塞时被其他线程设置了中断标志,则抛出InterruptedException异常并返回
        linkedBlockingDeque.putFirst(1);

       //写入元素至队尾,成功返回true, 如果队列已满,返回false, e的值不能为空,否则抛出NullPointerException。
        linkedBlockingDeque.offer();
        //限时阻塞队首入队,成功返回true,队列已满返回,超时未写入返回false,元素为null,抛出NullPointerException
        linkedBlockingDeque.offer(1, 3,TimeUnit.SECONDS );
        //非阻塞式队尾入队  满的话返回true 反之为false
        linkedBlockingDeque.offerFirst(1);
        //可响应中断限时阻塞队首入队
        linkedBlockingDeque.offerFirst(1,3,TimeUnit.SECONDS);

        //可响应中断限时阻塞队尾入队 未满返回true 满了就返回false
        linkedBlockingDeque.offerLast(1);

        //向队尾插入元素,如果队列未满则插入返回true,如果队列已满,则阻塞指定时间,如果超时未写入就返回false
        linkedBlockingDeque.offerLast(1,2,TimeUnit.SECONDS);



        //取取取取取取取取取取取取取取
        //取取取取取取取取取取取取取取
        //取取取取取取取取取取取取取取
        //取取取取取取取取取取取取取取
        //查找不移除
        linkedBlockingDeque.peek();
        //查找不移除 查找队列第一个元素,有的话返回,没有返回null
        linkedBlockingDeque.peekFirst();
        //查找不移除 查找队列最后一个元素,有的话返回,没有返回null
        linkedBlockingDeque.peekLast();

        //底层调用takeFirst(),取出元素并移除,为空则阻塞
        linkedBlockingDeque.take();
        //取出第一个元素并移除,为空则阻塞
        linkedBlockingDeque.takeFirst();
        //取出最后一个元素并移除,为空则阻塞
        linkedBlockingDeque.takeLast();
        //清除队列的元素置为null
        linkedBlockingDeque.clear();


        //把队列中的元素放入集合中    原队列元素不移除
        linkedBlockingDeque.drainTo(new ArrayList());

        //把指定数量的队列中的元素放入集合中     原队列元素不移除
        linkedBlockingDeque.drainTo(new ArrayList(),3);
        //判断队列是否存在某元素
        linkedBlockingDeque.contains();
        //判断队列是否存在集合中的元素
        linkedBlockingDeque.containsAll();


        //移除移除移除移除移除移除移除移除
        //移除移除移除移除移除移除移除移除
        //移除移除移除移除移除移除移除移除
        //移除移除移除移除移除移除移除移除
        //非阻塞移除第一个元素,没有就返回空
        linkedBlockingDeque.poll();
        //规定时间阻塞移除第一个元素,超时返回null
        linkedBlockingDeque.poll(3,TimeUnit.SECONDS);
        //非阻塞移除第一个元素,没有就返回空
        linkedBlockingDeque.pollFirst();
        //规定时间阻塞移除第一个元素,超时返回null
        linkedBlockingDeque.pollFirst(1,TimeUnit.SECONDS);

        //非阻塞移除最后一个元素,没有返回null,不然返回值
        linkedBlockingDeque.pollLast();
        //限时阻塞移除最后一个元素,超时返回null,不然返回值
        linkedBlockingDeque.pollLast(3, TimeUnit.SECONDS);



        //移除第一个元素,队列不可为空,为空抛出异常
        linkedBlockingDeque.remove();
        //从队首至队尾遍历(从前往后),移除通过equals判断相等的第一个元素,并返回true
        linkedBlockingDeque.remove(1);
        //此方法返回可以插入双端队列容器的剩余元素数
        linkedBlockingDeque.remainingCapacity();
        //移除第一个元素,队列不可为null
        linkedBlockingDeque.removeFirst();
        //非阻塞移除最后一个元素,不可为null
        linkedBlockingDeque.removeLast();
        //移除队列中首次出现的某个元素
        linkedBlockingDeque.removeFirstOccurrence();
        //方法从此双端队列删除最后一次出现的指定元素。如果双端队列不包含元素,则它将保持不变。如果此双端队列包含指定的元素,则返回true,否则返回false。
        linkedBlockingDeque.removeLastOccurrence();
        //从队列中移除集合中的元素,集合中的元素不可为null
        linkedBlockingDeque.removeAll();
        //移除双队列中满足条件的元素
        linkedBlockingDeque.removeIf();

 

标签:linkedBlockingDeque,队列,元素,介绍,添加,取取,移除,LinkedBlockingDeque
From: https://www.cnblogs.com/wangbiaohistory/p/17291042.html

相关文章

  • BPM工作流引擎常见的术语和概念介绍
    本文重点介绍BPM业务流程管理中常常用到概念和术语,这些概念同样适用于JBPM、Activiti、Flowable、Camunda等主流的开源流程引擎。一、BPM模型符号协议1、BPMN(业务流程模型和标记法)BPMN:业务流程模型和标记法(BPMN,BusinessProcessModelandNotation)是一套图形化表示法,用......
  • yaml-cpp YAML格式处理库的介绍和使用(面向业务编程-文件格式处理)
    yaml-cppYAML格式处理库的介绍和使用(面向业务编程-文件格式处理)YAML格式介绍YAML的格式介绍,有关ini、json和xml或许很多人已经很了解了,但是关于YAML,还有许多人不了解。YAML被设计成更适合人类阅读(我想正因为如此,所以相对来说更灵活,就导致到使用的时候很多人会觉得它看起来并不......
  • JsonCpp JSON格式处理库的介绍和使用(面向业务编程-文件格式处理)
    JsonCppJSON格式处理库的介绍和使用(面向业务编程-文件格式处理)介绍JSON是一种轻量级的数据交换格式,它是一种键值对的集合。它的值可以是数字、字符串、布尔值、序列。想知道更多有关JSON格式的介绍,可以到JSON的官网json.org学习JsonCpp是一个c++库,允许对JSON值进行操作,包括......
  • flask框架01 flask与pythonweb框架介绍 flask快速使用 登录显示用户信息案列 配置
    今日内容详细目录今日内容详细1Flask和pythonweb框架介绍1.1flask介绍2flask快速使用3登录,显示用户信息小案例3.1login.html3.2home.html3.3detail.html3.4py文件4配置文件方式5路由系统5.1转换器1Flask和pythonweb框架介绍pythonweb框架的本质都一样1.同步框架......
  • flask:Flask 和pythonweb框架介绍、flask快速使用、登录,显示用户信息小案例、配置文件
    目录一、Flask和pythonweb框架介绍1.1pythonweb框架介绍1.2flask介绍1.3wsgiref1.4用wsgirf和werkzeug写web二、flask快速使用三、登录,显示用户信息小案例3.1login.html3.2home.html3.3detail.html3.4py文件3.5知识点总结四、配置文件的使用方式1、设置方式一(测试中使用的......
  • 堆块chunk介绍及unlink漏洞利用原理
    堆块chunk介绍及unlink漏洞利用原理chunk结构当进程动态分配内存时,系统会在堆中创建一个chunk(堆块)。chunk包含chunk头和chunk体两部分chunk头中有两个字段:prev_size:前一个chunk的size,前指的之前分配的内存,也就是低地址相邻的chunksize:当前chunk的size,size字段的低3位A,M,P不......
  • 详细介绍Glib 主事件循环轻度分析与编程应用
    glib是一个跨平台、用C语言编写的若干底层库的集合。编写案例最好能够结合glib源码,方便随时查看相关函数定义。glib实现了完整的事件循环分发机制。有一个主循环负责处理各种事件。事件通过事件源描述,常见的事件源文件描述符(文件、管道和socket)超时idle事件当然,也可以自......
  • Python GUI 库介绍-PySimpleGUI
    1.pipinstallPySimpleGUI2.codingimportPySimpleGUIassglayout=[[sg.Text("HELLOPySimpleGUI")],[sg.Text("姓名"),sg.InputText("张喆坤")],[sg.Text("性别"),sg.InputText("N\A")],[sg.Text(&......
  • Appium移动端UI自动化介绍
    一.appium基本介绍1.搭建移动端自动化环境,具体搭建环境可以百度a.安装jdk并配置环境变量b.安装安装sdk并配置环境变量c.安装node.jsd.安装appiume.安装夜神模拟器 2.查看被测app包信息 1.冷启动时,windows系统输入adb logcat| findstr START  2.通过aapt命......
  • 一只退役狗の自我介绍
    好吧,其实我根本不懂日文,の也是牵强附会地用,这里其实是蹭学长热度。我是CDsidi,一只蒟蒻地不能再蒟蒻的退役OIer,所以常年游走在主流OI圈子之外,退役之后大家可能都没有听过/认识我,所以在这里做一个自我介绍。我接触OI主要还是因为兴趣+被忽悠。小学时候,因为我比较笨,所以做不好很......