Java并发集合之LinkedBlockingDeque_动力节点Java学院整理

  


  

  

LinkedBlockingDeque是双向链表实现的双向并发阻塞队列。该阻塞队列同时支持FIFO和费罗两种操作方式,即可以从队列的头和尾同时操作(插入/删除),并且,该阻塞队列是支持线程安全。
  

  

此外,LinkedBlockingDeque还是可选容量的(防止过度膨胀),即可以指定队列的容量。如果不指定,默认容量大小等于Integer.MAX_VALUE只

  


  

  

LinkedBlockingDeque的数据结构,如下图所示:

  

癑ava并发集合之LinkedBlockingDeque_动力节点Java学院整理"

  

<强>说明:
  

  

1。LinkedBlockingDeque继承于AbstractQueue,它本质上是一个支持FIFO和费罗的双向的队列。
  

  

2。LinkedBlockingDeque实现了BlockingDeque接口,它支持多线程并发。当多线程竞争同一个资源时,某线程获取到该资源之后,其它线程需要阻塞等待。
  

  

3。LinkedBlockingDeque是通过双向链表实现的。
  

  

3.1,第一个是双向链表的表头。
  去年是3.2,双向链表的表尾。
  3.3,计算是LinkedBlockingDeque的实际大小,即双向链表中当前节点个数。
  3.4,能力是LinkedBlockingDeque的容量,它是在创建LinkedBlockingDeque时指定的。
  3.5,锁是控制对LinkedBlockingDeque的互斥锁,当多个线程竞争同时访问LinkedBlockingDeque时,某线程获取到了互斥锁锁,其它线程则需要阻塞等待,直到该线程释放锁,其它线程才有机会获取锁从而获取cpu执行权。
  3.6,notEmpty和notFull分别是“非空条件”和“未满条件”。通过它们能够更加细腻进行并发控制。
  

  

     //创建一个容量为整数。MAX_VALUE的LinkedBlockingDeque。   LinkedBlockingDeque ()//创建一个容量为整数。MAX_VALUE的LinkedBlockingDeque,最初包含给定集合的元素,以该集合迭代器的遍历顺序添加。   LinkedBlockingDeque (Collection<& # 63;E>延伸;c)//创建一个具有给定(固定)容量的LinkedBlockingDeque。   LinkedBlockingDeque (int容量)//在不违反容量限制的情况下,将指定的元素插入此双端队列的末尾。   布尔加(E E)//如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的开的头,如果当前没有空间可用,则抛出IllegalStateException。   空白addFirst (E E)//如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的末尾,如果当前没有空间可用,则抛出IllegalStateException。   空白addLast (E E)//以原子方式(自动)从此双端队列移除所有元素。   空白clear ()//如果此双端队列包含指定的元素,则返回现实。   布尔(包含对象o)//返回在此双端队列的元素上以逆向连续顺序进行迭代的迭代器。   IteratordescendingIterator ()//移除此队列中所有可用的元素,并将它们添加到给定集合中。   int drainTo (Collection<& # 63;超级E>c)//最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定集合中。   int drainTo (Collection<& # 63;超级E>c, int maxElements)//获取但不移除此双端队列表示的队列的头部。   E元素()//获取,但不移除此双端队列的第一个元素。   E列表()//获取,但不移除此双端队列的最后一个元素。   E getLast ()//返回在此双端队列元素上以恰当顺序进行迭代的迭代器。   Iterator迭代器()//如果立即可行且不违反容量限制,则将指定的元素插入此双端队列表示的队列中(即此双端队列的尾部),并在成功时返回正确的;如果当前没有空间可用,则返回错误的。   布尔提供(E E)//将指定的元素插入此双端队列表示的队列中(即此双端队列的尾部),必要时将在指定的等待时间内一直等待可用空间。   布尔提供(E E,长时间超时,TimeUnit单元)//如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的开的头,并在成功时返回正确的;如果当前没有空间可用,则返回错误的。   布尔offerFirst (E E)//将指定的元素插入此双端队列的开的头,必要时将在指定的等待时间内等待可用空间。   布尔offerFirst (E E,长时间超时,TimeUnit单元)//如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的末尾,并在成功时返回正确的;如果当前没有空间可用,则返回错误的。   布尔offerLast (E E)//将指定的元素插入此双端队列的末尾,必要时将在指定的等待时间内等待可用空间。   布尔offerLast (E E,长时间超时,TimeUnit单元)//获取但不移除此双端队列表示的队列的头部(即此双端队列的第一个元素),如果此双端队列为空,则返回零。   E peek ()//获取,但不移除此双端队列的第一个元素,如果此双端队列为空,则返回零。   E peekFirst ()//获取,但不移除此双端队列的最后一个元素,如果此双端队列为空,则返回零。   E peekLast ()//获取并移除此双端队列表示的队列的头部(即此双端队列的第一个元素),如果此双端队列为空,则返回零。   E poll ()//获取并移除此双端队列表示的队列的头部(即此双端队列的第一个元素),如有必要将在指定的等待时间内等待可用元素。   E调查(长超时,TimeUnit unit)//获取并移除此双端队列的第一个元素,如果此双端队列为空,则返回零。   E pollFirst ()//获取并移除此双端队列的第一个元素,必要时将在指定的等待时间等待可用元素。   E pollFirst(长超时,TimeUnit unit)//获取并移除此双端队列的最后一个元素,如果此双端队列为空,则返回零。   E pollLast ()//获取并移除此双端队列的最后一个元素,必要时将在指定的等待时间内等待可用元素。   E pollLast(长超时,TimeUnit unit)//从此双端队列所表示的堆栈中弹出一个元素。   E pop ()//将元素推入此双端队列表示的栈。   空推(E E)//将指定的元素插入此双端队列表示的队列中(即此双端队列的尾部),必要时将一直等待可用空间。   空把(E E)//将指定的元素插入此双端队列的开的头,必要时将一直等待可用空间。   空白putFirst (E E)//将指定的元素插入此双端队列的末尾,必要时将一直等待可用空间。   空白putLast (E E)//返回理想情况下(没有内存和资源约束)此双端队列可不受阻塞地接受的额外元素数。   int remainingCapacity ()//获取并移除此双端队列表示的队列的头部。   E remove ()//从此双端队列移除第一次出现的指定元素。   逻辑删除对象(o)//获取并移除此双端队列第一个元素。   E removeFirst ()//从此双端队列移除第一次出现的指定元素。   布尔removeFirstOccurrence(对象o)//获取并移除此双端队列的最后一个元素。   E removeLast ()//从此双端队列移除最后一次出现的指定元素。   布尔removeLastOccurrence(对象o)//返回此双端队列中的元素数。   int大小()//获取并移除此双端队列表示的队列的头部(即此双端队列的第一个元素),必要时将一直等待可用元素。   E采取()//获取并移除此双端队列的第一个元素,必要时将一直等待可用元素。   E takeFirst ()//获取并移除此双端队列的最后一个元素,必要时将一直等待可用元素。   E takeLast ()//返回以恰当顺序(从第一个元素到最后一个元素)包含此双端队列所有元素的数组。   对象[]toArray ()//返回以恰当顺序包含此双端队列所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。   & lt; T>T [] toArray (T [])//返回此集合的字符串表示形式。   字符串toString ()      

Java并发集合之LinkedBlockingDeque_动力节点Java学院整理