今天开始在学习Java的阻塞队列,所以先进行一些了解
阻塞队列提供了可阻塞的put和take方法,以及支持定时的offer和poll方法。如果队列已经满了,那么put方法会阻塞到有可用空间;如果队列为空,take方法会一直阻塞到有可用元素。阻塞队列非常实用于生产者和消费者模式,当有数据生成时,生产者把数据放入队列,当消费者需要数据时,从队列中进行获取。而生产者不需要知道消费者的状态,同样消费者也不需要知道生产者的状态。当然消费者和生产者是相对的,假如生产者的速率大于消费者,那么当队列满了的时候,生产者可以转为消费者,将队列中的数据取出进行消费者的处理,这个道理同样适用于消费者。
下面来介绍阻塞队列的四种处理方式:
1.抛出异常,当调用add(e)方法将元素添加到队列中时,如果队列已经满了,则会抛出IllegalStateException;当调用remove(e)方法将元素从队列中移除时,如果指定的元素不存在时,则会抛出NullPointerException。当调用element()方法获取队列的头部时,如果队列为空,则会抛出NullPointerException。
2.特殊值,当调用offer(e)方法将元素插入到队列中时,如果该元素已经添加到该队列,则返回true,否则返回false;当调用poll()方法移除队列的头部时,返回被移除的队列头部;当调用peek()方法获取队列头部时,返回队列头部,如果队列为空,则返回null。
3.阻塞,即如前文介绍的put和take方法。
4.超时,当调用offer(e,time,unit)方法将指定元素插入到队列中,在插入之前等待以unit为单位的time超时时间,如果成功,返回true,如果超时,则返回false;当调用poll(time,unit)方法返回并且移除队列头部时,等待以unit为单位的time时间内的可用元素,如果成功,返回队列头部,如果超时,返回false。
接下来介绍几种常见的队列类型:
1.LinkedBlockingQueue:基于LinkedList的FIFO(first input,first out)的队列。
2.ArrayBlockingQueue:基于ArrayList的FIFO队列。
3.ProrityBlockingQueue:按照优先级排序的队列,可以按照元素的自然顺序或者元素实现的Comparable方式排序。
4.SynchronousQueue:实际上不是一个真正的队列,因为不会为队列中的元素进行维护,而它维护的是一组线程,这些线程在等待着把元素加入或者移除队列,它会直接将元素从生产者交付给消费者,而不需要一个中间件,从而会降低数据从生产者到消费者之间的延迟,但是该队列只适用于有足够多的消费者,并且总有一个消费者准备好获取交付的元素时的场合。
一些队列的基础知识介绍就到此,接下来会进入到更深入的了解方式。
相关推荐
主要介绍了剖析Java中阻塞队列的实现原理及应用场景,这里也对阻塞和非阻塞队列的不同之处进行了对比,需要的朋友可以参考下
实现java模拟阻塞队列的例子,该代码包括,阻塞队列实现生产者,消费者。和模拟阻塞队列实现生产者及消费者模式,帮助你更好的理解java多线程
主要介绍了java 中 阻塞队列BlockingQueue详解及实例的相关资料,需要的朋友可以参考下
java中,常用的阻塞式队列Demo。包含:ArrayBlockingQueue、LinkedQueue、PriorityBlockingQueue
Java实现简单的阻塞队列2种方式,1使用wait(),notify();2使用countdownlatch实现
主要介绍了Java中的阻塞队列详细介绍的相关资料,需要的朋友可以参考下
java学习(基于Java阻塞队列的搜索实例).pdf
我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。 使用非阻塞队列的时候有一个很大问题是:它不会对...
java阻塞队列实现原理及实例解析.docx
主要介绍了java阻塞队列实现原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
并发-线程池和阻塞队列 并发-线程池和阻塞队列 并发-线程池和阻塞队列
在前面的的文章,写了一个带有缓冲区的队列,是用JAVA的Lock下的Condition实现的,但是JAVA类中提供了这项功能,是ArrayBlockingQueue, ArrayBlockingQueue是由数组支持的有界阻塞队列,次队列按照FIFO(先进先...
主要介绍了Java控制阻塞队列线程集实例,本文用一个程序展示了如何使用阻塞队列来控制线程集,程序功能是在一个目录及它的所有子目录下搜索所有文件,打印出包含指定关键字的文件列表,需要的朋友可以参考下
主要介绍了Java使用阻塞队列控制线程通信的方法,结合实例形式详细分析了java使用阻塞队列控制线程通信的相关原理、方法及操作注意事项,需要的朋友可以参考下
消息分发框架,基于java阻塞队列实现,生产者消费者模型 可用于任务分发,服务器消息消息,以及网络IO 性能优化,多线程
主要介绍了详解Java阻塞队列(BlockingQueue)的实现原理,阻塞队列是Java util.concurrent包下重要的数据结构,有兴趣的可以了解一下
运行,登录时,请用两个浏览器登录,应为有不同session,这是跟据session来判断用户的
1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于...
阻塞队列实现生产者消费者模式Java开发Java经验技巧共4页.pdf.zip