zoukankan      html  css  js  c++  java
  • BlockingQueue 堵塞队列

    原文地址:http://www.cnblogs.com/daisyli/articles/3722066.html

    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的值被取走。
  • 相关阅读:
    太有才了!街头创意涂鸦手绘图片欣赏【上篇】
    设计前沿:25款精妙的 iOS 应用程序图标
    Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十八】
    神奇的世界!那些使用食物创造出来的景观【组图】
    Screenfly – 各种设备的屏幕和分辨率下快速测试网站
    经典网页设计:30个新鲜出炉的扁平化网站设计《下篇》
    40款很奇异的名片设计,吸引你的眼球《下篇》
    推荐25款实用的 HTML5 前端框架和开发工具【下篇】
    CSS3 Animation Cheat Sheet:实用的 CSS3 动画库
    今日推荐:12个获取手机应用程序设计灵感的网站
  • 原文地址:https://www.cnblogs.com/guoliangxie/p/7521813.html
Copyright © 2011-2022 走看看