LinkedBlockingDeque
来源:互联网 发布:java 回文字符串 编辑:程序博客网 时间:2024/05/17 04:16
LinkedBlockingDeque
JDK上面介绍:
是一个基于已链接节点的、任选范围的阻塞双端队列。
可选的容量范围构造方法参数是一种防止过度膨胀的方式。如果未指定容量,那么容量将等于 Integer.MAX_VALUE。只要插入元素不会使双端队列超出容量,每次插入后都将动态地创建链接节点。
大多数操作都以固定时间运行(不计阻塞消耗的时间)。异常包括 remove、removeFirstOccurrence、removeLastOccurrence、contains、iterator.remove() 以及批量操作,它们均以线性时间运行。
此类及其迭代器实现 Collection 和 Iterator 接口的所有可选 方法。
它的继承关系为:
- LinkedBlockingDeque就是一个双向并发的阻塞队列,其容量为final类型,入队列的时候可以挂机线程,并且可以头和尾进行操作。
- 既然这是阻塞式列表:列表为空或者已满,操作不会被立即执行,而是将调用这个操作的线程阻塞到队列直到操作可以执行成功。
- 由于有一个独占的锁,所以操作起来比较简单,所有队列操作加锁就能够实现,但是如果在高并发的情况下运行,性能就会有缺陷。
测试代码
package learnimport java.util.concurrent.{ExecutorService, Executors, LinkedBlockingDeque}import scala.actors.threadpool.TimeUnit/** * Created by lws on 2017/9/12. */class Test {}object Test{ var threadPool:ExecutorService = Executors.newFixedThreadPool(5) val link = new LinkedBlockingDeque[String](30) def main(args: Array[String]): Unit = { val num = 1 to 30 num.map(a =>threadPool.execute( new Runnable { override def run(): Unit = { link.push(a+"") println(a +" has been pushe by "+Thread.currentThread().getName) TimeUnit.SECONDS.sleep(1) } })) num.map( b=>threadPool.execute(new Runnable { override def run(): Unit = { println(link.remove()+" has been take by "+Thread.currentThread().getName) } })) TimeUnit.SECONDS.sleep(1) threadPool.shutdown() }}
在本例中我们开了一个有5个线程的线程池,每一个线程都先执行插入到链表数据的指令,然后当链表数据插入到了30个之后,在执行获取,链表中数据块的信息指令。获取的结果如下:
26 has been pushe by pool-1-thread-530 has been pushe by pool-1-thread-229 has been pushe by pool-1-thread-426 has been take by pool-1-thread-227 has been take by pool-1-thread-128 has been take by pool-1-thread-329 has been take by pool-1-thread-530 has been take by pool-1-thread-4
可以看出29被线程池1的第四个线程插入,但是被线程池中的第五个线程取出,好了到此我们完成测试完成。
阅读全文
0 0
- LinkedBlockingDeque
- LinkedBlockingDeque
- LinkedBlockingDeque工作密取
- LinkedBlockingDeque工作密取
- LinkedBlockingDeque实现生产者消费者
- 两个thread传递LinkedBlockingDeque
- Deque与LinkedBlockingDeque
- Java多线程之-LinkedBlockingDeque
- LinkedBlockingDeque源码讲解
- java并发编程-LinkedBlockingDeque
- Deque与LinkedBlockingDeque深入分析 .
- java LinkedBlockingDeque队列源码解读
- Deque与LinkedBlockingDeque深入分析
- JUC集合-09之 LinkedBlockingDeque
- 阻塞queue系列之LinkedBlockingDeque
- java多线程-新特征-阻塞栈LinkedBlockingDeque
- Java Deque与LinkedBlockingDeque深入分析
- 双向队列---Deque与LinkedBlockingDeque深入分析
- BZOJ 2006: [NOI2010]超级钢琴
- CentOS 6.5 下Nginx的配置
- Emacs
- 用户空间和内核空间,进程上下文
- html标签
- LinkedBlockingDeque
- 使用c3p0链接数据库
- 【JavaScript】随笔2
- leetcode 107. Binary Tree Level Order Traversal II
- hadoop 伪分布式 web浏览器访问不到yarn
- 有序链表的插入
- 程序人生的四个象限和两条主线
- hdu 5861 (线段树,区间更新,单点查询)
- 【推荐】打造独一无二的电子商务平台-鸿鹄云商b2b b2c o2o