`
jjw
  • 浏览: 64769 次
文章分类
社区版块
存档分类
最新评论

几种阻塞队列

阅读更多

BlockingQueue

获取元素的时候等待队列里有元素,否则阻塞
保存元素的时候等待队列里有空间,否则阻塞
用来简化生产者消费者在多线程环境下的开发
ArrayBlockingQueue
FIFO、数组实现
有界阻塞队列,一旦指定了队列的长度,则队列的大小不能被改变
在生产者消费者例子中,如果生产者生产实体放入队列超过了队列的长度,则在offer(或者put,add)的时候会被阻塞,直到队列的实体数量< 队列的初始size为止。不过可以设置超时时间,超时后队列还未空出位置,则offer失败。
如果消费者发现队列里没有可被消费的实体时也会被阻塞,直到有实体被生产出来放入队列位置,不过可以设置等待的超时时间,超过时间后会返回null
DelayQueue
有界阻塞延时队列,当队列里的元素延时期未到是,通过take方法不能获取,会被阻塞,直到有元素延时到期为止
如:
1.obj 5s 延时到期
2.obj 6s 延时到期
3.obj 9s 延时到期
那么在take的时候,需要等待5秒钟才能获取第一个obj,再过1s后可以获取第二个obj,再过3s后可以获得第三个obj
这个队列可以用来处理session过期失效的场景,比如session在创建的时候设置延时到期时间为30分钟,放入延时队列里,然后通过一个线程来获取这个队列元素,只要能被获取到的,表示已经是过期的session,被获取的session可以肯定超过30分钟了,这时对session进行失效。

LinkedBlockingQueue
FIFO、Node链表结构
可以通过构造方法设置capacity来使得阻塞队列是有界的,也可以不设置,则为无解队列
其他功能类似ArrayBlockingQueue


PriorityBlockingQueue
无界限队列,相当于PriorityQueue + BlockingQueue
插入的对象必须是可比较的,或者通过构造方法实现插入对象的比较器Comparator<? super E>
队列里的元素按Comparator<? super E> comparator比较结果排序,PriorityBlockingQueue可以用来处理一些有优先级的事物。比如短信发送优先级队列,队列里已经有某企业的100000条短信,这时候又来了一个100条紧急短信,优先级别比较高,可以通过PriorityBlockingQueue来轻松实现这样的功能。这样这个100条可以被优先发送
SynchronousQueue
无内部容量的阻塞队列,put必须等待take,同样take必须等待put。比较适合两个线程间的数据传递。异步转同步的场景不太适用,因为对于异步线程来说在处理完事务后进行put,但是必须等待put的值被取走。

分享到:
评论

相关推荐

    基于Java实现的(控制台)操作系统课设(作业调度,内存管理、进程调度、进程阻塞)【100012937】

    也就是说,处于就绪、运行、阻塞三种状态的进程数目之和最多为 5 个,即并发进程数最多为 5 个,在进程结束后,就会被调出内存,使用 FCFS 算法从后备队列中调入新的作业。在内存中的几个非阻塞状态的进程使用时间片...

    基于Java的操作系统课程设计(作业调度,内存管理、进程调度、进程阻塞等功能).zip

    也就是说,处于就绪、运行、阻塞三种状态的进程数目之和最多为 5 个,即并发进程数最多为 5 个,在进程结束后,就会被调出内存,使用 FCFS 算法从后备队列中调入新的作业。在内存中的几个非阻塞状态的进程使用时间片...

    个人总结的深入java多线程开发

    4)几种多线程代码写法 10 5)一个超时自动退出程序的类 12 6)同步锁synchronized 13 7)一个程序执行1秒之后自动退出 13 8)线程的状态 14 9)线程阻塞的条件(重要) 14 10) Interrupt()注意事项 16 三. 线程之间协作 17 ...

    高级开发并发面试题和答案.pdf

    面试高级开发的期间整理的面试题目,记录我面试遇到过的并发题目以及答案 目录 并发 常说的并发问题是哪些;资源竞争、死锁、事务、可见性 ...实现一个阻塞队列(用Condition写生产者与消费者就)?BlockingQueue

    基于JavaScript实现进程调度算法模拟源码(课程设计).zip

    在作业调度中:算法每次从后备队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。 在进程调度中:FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将...

    基于Java实现生产者与消费者算法模拟【100010232】

    本次课程设计选到的题目为生产者消费者算法模拟,通过需求分析和资料搜寻,掌握到生产者/消费者的模式原理和优点,同时也了解到了几种可以实现生产者消费者的方式,如信号量方式,管程方式,阻塞队列方式等。

    java线程池概念.txt

    workQueue:一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响,一般来说,这里的阻塞队列有以下几种选择   ArrayBlockingQueue;  LinkedBlockingQueue;  ...

    事务队列等待(TxEnqueue)深入分析——记录锁

    在我之前的文章中,曾经分析过产生TX锁的几种情况。但是,在发现TX锁时,我们如何鉴别是哪一种情况导致的呢?当存在TX等待队列时,如何找到锁所在的对象呢?记录锁这类锁是事务插入/删除/更新数据记录时加在记录的锁...

    Netty高性能网络应用框架.rar

    常见IO模型分为几种: BIO :Blocking IO, 即同步阻塞式IO。Client和Server的每建立一次连接,都会创建一个线程,在Client等待Server响应的期间,会处于阻塞状态。 NIO :Non-Blocking IO,即同步非阻塞式IO。NIO是...

    java面试常见基础(深层次,高级研发)

    5.2. 下面我们来看一下几种垃圾收集算法 18 5.2.1. 在JDK1.2之前,使用的是引用计数器算法, 18 5.2.2. 根搜索算法 19 5.2.3. 引用的分类 19 5.3. 方法区也是会被回收的 20 5.4. 下面我们来逐一介绍一下每个垃圾回收...

    操作系统简答题.docx

    在单处理机环境下,进程间有哪几种通信方式,是如何实现的? 1. 作业调度:从一批后备作业中选择一个或几个作业,给它们分配资源,建立进程,挂入就绪队列。执行完后,回收资源。 进程调度:从就绪进程队列中根据...

    阿里巴巴,天猫,支付宝面试题

    14. spring的bean配置的几种方式 15. web.xml的配置 16. spring的监听器。 17. zookeeper的实现机制,有缓存,如何存储注册服务的 18. IO会阻塞吗?readLine是不是阻塞的 19. 用过spring的线程池还是java的线程池? ...

    leetcode下载-studyday:记得我

    不推荐使用Excutors工具类去创建默认的几种线程池。会有OOM风险...要么核心线程树可能过多要么 工作队列没有限制。 推荐使用ThreadPoolExecutor构造方法自己定制创建。设置适合的核心数,选择合适的阻塞队列类型以及...

    Java多线程系列——-多线程的风险问题

    这篇文章,我想说明一下关于Java多线程中会遇到的几种风险以及它们的 概念 1.死锁: 死锁的含义是指一组线程在执行过程中竞争资源导致的一种阻塞的现象,其原因是其中的每一个线程都在等待仅由该组中其他线程才可以...

    数据持久化方案redisDB.zip

    redis运行时连接数据库 cache失效时同步读mysql, 数据修改时候通过消息队列通知DB线程写mysql reids.conf增加几个配置选项 mysql_host mysql_port mysql_user mysql_pwd mysql_dbname persistence_mmap_file: 消息...

    cpu时间片策略的由来

    时间片的大小从几ms到几百ms.当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一...

    Tomcat面试专题及答案.pdf

    tomcat 有哪几种 Connector 运行模式(优化)? bio:传统的 Java I/O 操作,同步且阻塞 IO。 maxThreads=”150”//Tomcat 使用线程来处理接收的每个请求。这个值表示 Tomcat 可创建的最大的线程数。默认值 200。可以...

    操作系统 进程调度模拟实验报告(报告中附源码)

    1. 几种进程调度算法  短进程优先调度算法  高优先权优先调度算法  先来先服务调度算法  基于时间片的轮转调度算法 2. 进程的组成  进程控制块(PCB)  程序段  数据段 3. 进程的基本状态  就绪W...

    OS 操作系统 进程 线程 文件 设备 C# 多用户 登陆 课程设计 报告 算法 FCFS

    文件中要有一种特定命令的“可执行”文件,文件中的命令非常简单,仅仅包括以下几种指令: i=?; 给i赋值一位数 i++; i加1 i--; i减1 !??; end; 第一个?为A,B,C中某个设备,第二个?为一位数,表示使用设备...

Global site tag (gtag.js) - Google Analytics