java源码解读@IT·互联网程序员

java基础:java.util.concurrent.Bloc

2017-05-29  本文已影响137人  wuxiaowei

前言

在一次项目中,偶遇BlockingQueue,特意查了下用法,使我对它有了强列的兴趣,经过一段时间的学习,将其整理,用图解的方式解释,方便理解。

介绍

在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。图(1_0.png)是其继承关系,可以看出BlockingQueue是继承Queue。

1_0.png

我们先看下BlockQueue的图解,通过图,我们很容易理解,这是一个队列基本图,在图中,我们发现入队有put、add、offer三个方法。出队有poll、remove、take三个方法,就是因为这几个方法,使得blockQueue功能很强大。

1_1.png

put、add、offer 区别

poll、remove、take 区别

阻塞模型

  1. 当队列满了,再往队列里put数据就会出现线程等待,模型如下


    Paste_Image.png
  2. 当队列空了,再往队列里take数据,就会出现线程等待,模型如下

Paste_Image.png

实现了BlockingQueue的类

Paste_Image.png

我们常用的队列就linkedBlockingQueue和ArrayBlockingQueue。

LinkedBlockingQueue 和 ArrayBlockingQueue

这两个队列的实现几乎都是相似的,我们可以理解成对应的数组和链表的实现。并且是线程安全的,在特定场景中使用特定的实现类能保证高效和空间的合理性。

上一篇 下一篇

猜你喜欢

热点阅读