上篇我们讲了使用wait()和notify()使线程间实现合作,这种方式很直接也很灵活,但是使用之前需要获取对象的锁,notify()调用的次数如果小于等待线程的数量就会导致有的线程会一直等待下去。这篇我们讲多线程间接协作的方式,阻塞队列和管道通讯,间接协作的优点是使用起来更简单并且不易出错。 阻塞 ...
分类:
编程语言 时间:
2018-06-23 22:51:59
阅读次数:
195
阻塞队列 再写阻塞列队之前,我写了一篇有关queue集合相关博客,也主要是为这篇做铺垫的。 网址:【java提高】 queue集合 在这篇博客中我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。 使用非阻 ...
分类:
编程语言 时间:
2018-06-20 22:42:48
阅读次数:
254
第一部分:延迟消息的实现原理和知识点 使用RabbitMQ来实现延迟任务必须先了解RabbitMQ的两个概念:消息的TTL和死信Exchange,通过这两者的组合来实现上述需求。 消息的TTL(Time To Live) 消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消息分别设置TTL ...
分类:
其他好文 时间:
2018-06-20 18:44:22
阅读次数:
243
queue集合 什么是Queue集合? 答:Queue用于模拟队列这种数据结构。队列通常是指“先进先出(FIFO)”的容器。队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素。 新元素插入到队列的尾部,取出元素会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。 一、认识q ...
分类:
编程语言 时间:
2018-06-19 22:39:11
阅读次数:
186
一、AQS原理 AQS(AbstractQueuedSynchronizer)队列同步器是用来构建锁、同步组件的基础框架。 AQS内部通过一个volatile int类型的成员变量state控制同步状态【0代表锁未被占用,1表示已占用】,通过内部类Node构成FIFO的同步队列实现等待获取锁的线程排 ...
分类:
其他好文 时间:
2018-06-11 11:06:46
阅读次数:
255
各I/O模型优缺点 BIO通信模型 BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接 线程池I/O编程 假如所有可用线程都被阻塞,后续I/O都将在队列中排队 线程池采用阻塞队列实现,队列积满之后,后续入队列操作将被阻 ...
分类:
编程语言 时间:
2018-05-29 18:54:55
阅读次数:
211
zero, one, two, three, fous, five, six, seven, eight, nine = range(10) """ Author:Cairo """ ''' 用队列实现用户的历史记录功能(最多n条)? 实际案例: 猜数字小游戏: 添加历史记录功能,显示用户最近的状态... ...
分类:
其他好文 时间:
2018-05-25 22:50:31
阅读次数:
179
阻塞队列是 java.util.concurrent 包提供的一个类,该类提供了多线程中通过队列实现安全高效的数据处理的功能。 所谓阻塞队列,是在普通队列基础上实现了阻塞线程的功能: 队列为空时,获取元素的线程阻塞,直到队列变为非空。 当队列满时,存储元素的线程阻塞,直到队列可用(非满)。 以下是阻 ...
分类:
其他好文 时间:
2018-05-23 14:59:48
阅读次数:
208
LinkedList是常用的集合结构之一,数据存储结构为链式存储,每个节点都有元素、前指针和后指针,指针指向了前节点和后节点的位置。同是LinkedList也是一个队列,实现了Deque接口,Deque接口继承了Queue接口。 1.7以前为双向循环链表,之后没有循环了哦。 队列出入顺序为FIFO, ...
分类:
其他好文 时间:
2018-05-20 18:48:59
阅读次数:
169
简洁版: 注释版: 扩展 队列的特性是: 一端存, 一端取 此队列是用python的list实现的 此队列的__两种__实现方式 __1: 头部存 尾部取__ 适用于取操作比较频繁的队列 实现代码: 2: 尾部存 头部取 适用于存操作比较频繁的队列 实现代码: ...
分类:
其他好文 时间:
2018-05-03 14:20:21
阅读次数:
152