atitit. java queue 队列体系and自定义基于数据库的队列总结o7t

1. 阻塞队列和非阻塞队列 1

2. java.util.Queue接口, 1

3. ConcurrentLinkedQueue 2

4. BlockingQueue阻塞队列 2

4.1. 1. ArrayBlockingQueue 3

4.2. 2. LinkedBlockingQueue 3

4.3. 3. DelayQueue 3

4.4. 4. PriorityBlockingQueue 3

4.5. SynchronousQueue 3

5. LinkedBlockingDeque 乃阻塞双端队列 3

6. 自定义队列实现Queue接口 4

7. 参考 4

1. 阻塞队列和非阻塞队列

多数生产消费模型的首选数据结构就是队列。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。

同步是阻塞模式,异步是非阻塞模式

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

2.  java.util.Queue接口,

在java5中新增加了java.util.Queue接口,

用以支持队列的常见操作。该接口扩展了java.util.Collection接口。
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优
点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用
element()或者peek()方法。
值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

3. ConcurrentLinkedQueue

4. BlockingQueue阻塞队列

 BlockingQueue不光实现了一个完整队列所具有的基本功能,同时在多线程环境下,他还自动管理了多线间的自动等待于唤醒功能,从而使得程序员可以忽略这些细节,关注更高级的功能。

阻塞实现通常使用加锁上实现...

常见BlockingQueue

在了解了BlockingQueue的基本功能后,让我们来看看BlockingQueue家庭大致有哪些成员?

首先,看看BlockingQueue提供的常用方法:

可能报异常

返回布尔值

可能阻塞

设定等待时间

入队

add(e)

offer(e)

put(e)

offer(e, timeout, unit)

出队

remove()

poll()

take()

poll(timeout, unit)

查看

element()

peek()

· 
从上表可以很明显看出每个方法的作用,这个不用多说。我想说的是: add(e) remove() element() 方法不会阻塞线程。当不满足约束条件时,会抛出IllegalStateException 异常。例如:当队列被元素填满后,再调用add(e),则会抛出异常。

· offer(e) poll() peek() 方法即不会阻塞线程,也不会抛出异常。例如:当队列被元素填满后,再调用offer(e),则不会插入元素,函数返回false。

· 要想要实现阻塞功能,需要调用put(e) take() 方法。当不满足约束条件时,会阻塞线程。

BlockingQueue成员详细介绍

4.1. 1. ArrayBlockingQueue

4.2. 2. LinkedBlockingQueue

基于链表的阻塞队列

4.3. 3. DelayQueue

DelayQueue中的元素只有当其指定的延迟时间到了,才能够从队列中获取到该元素

4.4. 4. PriorityBlockingQueue

基于优先级的阻塞队列(优先级的判断通过构造 函数传入的Compator对象来决定),但需要注意的是PriorityBlockingQueue并不会阻塞数据生产者,而只会在没有可消费的数据 时,阻塞数据的消费者。因此使用的时候要特别注意,生产者生产数据的速度绝对不能快于消费者消费数据的速度,否则时间一长,会最终耗尽所有的可用堆内存空 间。在实现PriorityBlockingQueue时,内部控制线程同步的锁采用的是公平锁。

4.5. SynchronousQueue

5. LinkedBlockingDeque 乃阻塞双端队列

ArrayDeque 双向队列 
LinkedBlockingDeque 阻塞双端队列 
ArrayBlockingQueue 双向并发阻塞队列 
LinkedBlockingQueue FIFO队列 
ConcurrentLinkedQueue 基于链接节点的无界线程安全队列 
PriorityBlockingQueue 带优先级的无界阻塞队列 
还有很多很多,可以看看AbstractQueue, Deque有哪些实现类。

6. 自定义队列实现Queue接口

实现add  ,remove (obj) 方法...

And 大批量操作方法...   addBatch  ,  peekBatch   ,

7. 参考

java中线程队列BlockingQueue的用法-shwenwen-ITPUB博客.htm

Java并发包中的同步队列SynchronousQueue实现原理 _ 并发编程网 - ifeve.com.htm

Java多线程总结之线程安全队列Queue - 火木棉的日志 - 网易博客.htm

atitit. java queue 队列体系and自定义基于数据库的队列总结o7t相关推荐

  1. Java queue总结

    1.LinkedBlockingQueue:基于链接节点的可选限定的blocking queue . 这个队列排列元素FIFO(先进先出). 队列的头部是队列中最长的元素. 队列的尾部是队列中最短时间 ...

  2. atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener...

    atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener 1. 自定义web服务器的实现方案,基于原始socket vs   ...

  3. Leetcode刷题 225题:用队列实现栈(基于Java和c++两种语言)

    ** Leetcode刷题 225题:用队列实现栈(基于Java和c++两种语言) ** 题目: 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top( ...

  4. 基于链表实现队列(基于Java实现)

    title: 基于链表实现队列(基于Java实现) tags: 链表 队列 基于链表的队列实现方法的原理: 基于链表的实现,跟前面的基于数组实现一样,同样也需要两个指针:head指针和tail指针.它 ...

  5. 基于数组实现队列(基于Java实现)

    title: 基于数组实现队列(基于Java实现) tags: 数组 队列 基于数组实现队列的原理: 基于数组实现的队列,使用两个指针,一个是head指针 ,指向的是队头:一个是tail指针,指向队尾 ...

  6. 基于Java的Minecraft游戏后端自定义插件 的Java实践项目整理

    Minecraft_Plugin 1.项目概述 2.系统设计 3.功能模块成果展示 4.个人总结 1.项目概述 1.1 项目简介 小组准备编写一个具有武器战斗,道具收集.互动社交和任务悬赏四大系统的聚 ...

  7. java queue put take_阻塞队列的take、offer、put、add的一些比较

    最近在学习<>,有很多java.util.concurrent包下的新类.LinkedBlockingQueue就是其中之一,顾名思义这是一个阻塞的线程安全的队列,底层应该采用链表实现. ...

  8. Java—Queue队列详解(Deque/PriorityQueue/Deque/ArrayDeque/LinkedList)

    Queue Queue队列介绍   Queue是用于模拟队列的,啥叫队列?队列就是排队的意思,比如排队结账,先进入队伍中,先排到先付账走人:后排到的,进入队伍,等前面的人出队伍后,再跟在后面付钱出队. ...

  9. Java全栈体系路线(总结不易,持续更新中)

    文章目录 Java全栈工程师 <font color=orange>Java基础 基础语法 面向对象 工具类 集合框架 序列化 反射机制 注解 文件处理 设计模式 视频教程 文档教程 练习 ...

  10. 学习Java: Queue

    15 08, 2007 学习Java: Queue Java - 作者 zybing @ 15:17 Java提供了Quere,相当好用,在1.5版本中又有增强. Queue: 基本上,一个队列就是一 ...

最新文章

  1. 京东数科业务架构全披露,陈生强发布城市操作系统和京东钼媒
  2. zip压缩和unzip解压缩命令详解
  3. 《失控玩家》爆火背后:什么才是拥抱人工智能的正确姿势?
  4. 非阻塞同步算法实战(二)-BoundlessCyclicBarrier
  5. alibaba 实体转json_JAVA中使用alibaba fastjson实现JSONObject、Object、Json字符串的转换...
  6. MVCPager学习小记
  7. BGP(3):BGP 的路径优选
  8. 【数竞笔记2】—— 常见积分方法
  9. 计算机科学与技术研究生课表,计算机科学与技术专业2018级研究生课程表.doc
  10. 手写个Tomcat雏型
  11. nba2k15正版服务器,NBA2K15正版联机帐户过期怎么办_NBA2K15正版联机帐户过期解决方法_快吧单机游戏...
  12. idea html设置字体大小,intellij idea设置(字体大小、背景)
  13. TP50、TP90、TP99、TP999
  14. NXP JN5169使用EEPROM/片上FLASH/随机数/内部NVM
  15. 北京尚学堂退课退课,口碑还不错
  16. Linux不显示IP的问题
  17. HSM(安全管理平台)
  18. 前端学习之HTML——表格
  19. 软银投资工业软件公司OSIsoft 价值数十亿美元
  20. 【Java】时间格式化注解

热门文章

  1. Kafka技术资料总结(不断更新中)
  2. 前端使用puppeteer 爬虫生成《React.js 小书》PDF并合并
  3. VMThread占CPU高基本上是JVM在频繁GC导致,原因基本上是冰法下短时间内创建了大量对象堆积造成频繁GC。...
  4. 让UITableView数据处理更轻便
  5. 省市联动_简单的Demo,适用于各种二级菜单联动
  6. java,mysql,hadoop,cdh,hive,spark,ntp,zookeeper,kafka,storm,redis,flume,git 安装详解
  7. JS魔法堂:元素克隆、剪切技术研究
  8. Jquery 学习笔记一
  9. HTML Parsing Error KB927917
  10. HTML 标签的 enctype 属性