陈硕的《Linux多线程服务端编程:使用muduo C++网络库》中2.2一节中写了一个简单的容量无限的BlockingQueue,其中出队函数enqueue()中,每次添加元素都会调用pthread_cond_signal(封装成了Condition::notify()).然后提了一个问题,如果改 ...
分类:
编程语言 时间:
2017-11-11 17:42:33
阅读次数:
363
概述 BlockingQueue支持两个附加操作的Queue:1)当Queue为空时,获取元素线程被阻塞直到Queue变为非空;2)当Queue满时,添加元素线程被阻塞直到Queue不满。BlockingQueue不允许元素为null,如果入队一个null元素,会抛NullPointerExcept ...
分类:
编程语言 时间:
2017-11-05 11:30:10
阅读次数:
307
【BlockingQueue常见】 [ ArrayBlockingQueue ] 基于数组的阻塞队列的实现,在ArrayBlockingQueue内部,维护了一个定长数组,以便缓存队列中的数据对象,其内部没实现读写分离,也就意味着生产者和消费者不能完全并行,长度需要自定义,可以指定先进先出或者先进后 ...
分类:
其他好文 时间:
2017-10-14 18:33:16
阅读次数:
165
在学习Java 多线程并发开发过程中,了解到DelayQueue类的主要作用:是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。注意:不能将null元素放置到这种队列中。 Dela ...
分类:
编程语言 时间:
2017-10-09 10:53:09
阅读次数:
169
一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池 中成为空闲状态,等待执行 ...
分类:
编程语言 时间:
2017-10-08 13:03:38
阅读次数:
305
disruptor提供了线程间消息通信机制,通常会拿它和jdk中的blockingQueue作比较,blockingQueue使用了ReentrantLock。 下例的逻辑是,生产500个ValueEvent,先后由toDbHandler和businessHandler消费事件。 normalTes ...
分类:
其他好文 时间:
2017-10-03 23:24:10
阅读次数:
239
原文首发于简书:http://www.jianshu.com/p/689e3fbd8833 本文将会对DelayQueue做一个简单的介绍,并提供部分源码的分析。 DelayQueue的特性基本上由BlockingQueue、PriorityQueue和Delayed的特性来决定的。 简而言之,De ...
分类:
其他好文 时间:
2017-09-30 21:00:06
阅读次数:
197
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。 ...
分类:
其他好文 时间:
2017-09-29 21:12:52
阅读次数:
205
注意:该随笔内容完全引自http://wsmajunfeng.iteye.com/blog/1629354,写的很好,非常感谢,复制过来算是个积累,怕以后找不到。 一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高 ...
分类:
其他好文 时间:
2017-09-28 16:51:21
阅读次数:
184
先上原理图: 上代码之前,要先补充一下线程池构造的核心几个点 本例实现简化了一些,只实现了BlockingQueue存放任务,然后每个worker取任务并执行,下面看代码首先定义一个线程池ThreadExcutor 然后定义一个内部类Worker,这个内部类Worker是用来执行每个任务的,在创建线 ...
分类:
编程语言 时间:
2017-09-28 11:44:30
阅读次数:
455