在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如 ...
分类:
编程语言 时间:
2018-11-22 20:45:23
阅读次数:
204
什么是阻塞队列? 一个支持两个附加操作的队列。这两个附加操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者场景。 非阻塞队列与阻塞队列处理方法对比: 非阻塞队列中几个主要方法有: add(E e):将元素e插入到队列末尾。成 ...
分类:
编程语言 时间:
2018-11-13 16:19:27
阅读次数:
161
为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。今天我们就来讨论下同步容器。 一、为什么会出现同步容器? 在Java的集合容器框架中,主要有四大类别:List、Set、Queu ...
分类:
编程语言 时间:
2018-10-31 12:30:45
阅读次数:
202
引言 JDK中除了上文提到的各种并发容器,还提供了丰富的阻塞队列。阻塞队列统一实现了BlockingQueue接口,BlockingQueue接口在java.util包Queue接口的基础上提供了put(e)以及take()两个阻塞方法。他的主要使用场景就是多线程下的生产者消费者模式,生产者线 ...
分类:
编程语言 时间:
2018-10-26 00:49:20
阅读次数:
199
在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如 ...
分类:
编程语言 时间:
2018-10-25 11:19:50
阅读次数:
151
注意:该随笔内容完全引自http://wsmajunfeng.iteye.com/blog/1629354,写的很好,非常感谢,复制过来算是个积累,怕以后找不到。 一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高 ...
分类:
其他好文 时间:
2018-10-14 02:01:00
阅读次数:
164
线程池原理 谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中;每次使用都从里面获取,用完之后又放回池子供其他人使用,有点吃大锅饭的意思。 那在 Java 中又是如何实现的呢? 在 JDK 1.5 之后推出了相关的 api,常见的创建线程池方式有以下几种: Executors ...
分类:
编程语言 时间:
2018-10-09 15:04:33
阅读次数:
199
线程的使用、Executor、阻塞队列、Lock-free、锁使用的经验介绍,并发流程、定时器等 ...
分类:
编程语言 时间:
2018-09-29 22:43:53
阅读次数:
200
自己实现阻塞队列的话可以采用Object下的wait和notify方法,也可以使用Lock锁提供的Condition来实现,本文就是自己手撸的一个简单的阻塞队列,部分借鉴了JDK的源码。Ps:最近看面经的时候发现字节跳动的面试官特别喜欢让面试者手写阻塞队列,希望本文能对大家有帮助。个人手撸如有错误还 ...
分类:
其他好文 时间:
2018-09-27 17:00:38
阅读次数:
160
在并发队列上jdk提供了两套实现,一个以concurrentLinkedQueue为代表的高性能队列,一个以BlockingQueue接口为代表的阻塞队列。 ConcurrentLinkedQueue:无界队列,遵循先进先出原则,队列不允许NUll元素。 add()和offer()都是加入元素方法, ...
分类:
其他好文 时间:
2018-09-24 18:31:48
阅读次数:
207