码迷,mamicode.com
首页 > 数据库 > 详细

Java LinkedBlockingQueue和ArrayBlockingQueue分析

时间:2014-09-29 12:56:10      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   使用   ar   java   数据   

LinkedBlockingQueue是一个链表实现的阻塞队列,在链表一头加入元素,如果队列满,就会阻塞,另一头取出元素,如果队列为空,就会阻塞。


LinkedBlockingQueue内部使用ReentrantLock实现插入锁(putLock)和取出锁(takeLock)。putLock上的条件变量是notFull,即可以用notFull唤醒阻塞在putLock上的线程。takeLock上的条件变量是notEmtpy,即可用notEmpty唤醒阻塞在takeLock上的线程。


知道了LinkedBlockingQueue,再来理解ArrayBlockingQueue就比较好理解了。类似LinkList和ArrayList的区别。如果知道队列的大小,那么使用ArrayBlockIngQueue就比较合适了,因为它使用循环数组实现,但是如果不知道队列未来的大小,那么使用ArrayBlockingQueue就必然会导致数组的来回复制,降低效率。


记住多线程保护的一定是数据,而不是代码,在此例中,锁保护的也是其中共享的队列对象,防止出现不一致的情况。

原文:http://blog.csdn.net/hongchangfirst/article/details/39667677

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst


Java LinkedBlockingQueue和ArrayBlockingQueue分析

标签:style   blog   http   color   io   使用   ar   java   数据   

原文地址:http://blog.csdn.net/hongchangfirst/article/details/39667677

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!