ArrayBlockingQueue源码阅读心得
????? 最近在看林昊写的那本《分布式java应用》,阿里巴巴(包括淘宝、支付宝)是我最想去的地方,所以看淘宝网架构师写的书还是很有必要的。
????? 该书第4章讲到了java.util.concurrent下面的一些常用类,由于书上写的太过笼统,所以找出一些类的源码进行阅读,现把心得写一下,供以后自己参考。
????? 废话不说,先看ArrayBlockingQueue的源码。
????? ArrayBlockingQueue是一个基于数组的、先进先出、线程安全的集合类,其特色为可实现指定时间的阻塞读写,并且容量是可以限制的。
????? 通过阅读代码,可以看出该类是通过ReentrantLock来保证线程安全的,顺便讲一下ReentrantLock。
????? ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等候的一些特性。此外,它还提供了在激烈争用情况下更佳的性能。在该类的实现中,采用的是不公平锁。
?
Itr() { lastRet = -1; if (count == 0) nextIndex = -1; else { nextIndex = takeIndex; nextItem = items[takeIndex]; } }??? ? ? ? 该Itr实例包含了当前数组尾部的索引以及尾部的元素,调用完毕后释放锁。