您的位置:首页 > 其它

echarts数据自我定制(一)

2013-10-21 15:49 232 查看
      最近在看林昊写的那本《分布式java应用》,阿里巴巴(包括淘宝、支付宝)是我最想去的地方,所以看淘宝网架构师写的书还是很有必要的。

      该书第4章讲到了java.util.concurrent下面的一些常用类,由于书上写的太过笼统,所以找出一些类的源码进行阅读,现把心得写一下,供以后自己参考。

      废话不说,先看ArrayBlockingQueue的源码。

      ArrayBlockingQueue是一个基于数组的、先进先出、线程安全的集合类,其特色为可实现指定时间的阻塞读写,并且容量是可以限制的。

      通过阅读代码,可以看出该类是通过ReentrantLock来保证线程安全的,顺便讲一下ReentrantLock。

      ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等候的一些特性。此外,它还提供了在激烈争用情况下更佳的性能。在该类的实现中,采用的是不公平锁。

 

public ArrayBlockingQueue(int capacity) {
this(capacity, false);
}

 

      该类没有默认构造函数,从上面的构造函数中可以看出默认情况下采用不公平锁。

      offer方法有两种实现,分为阻塞的和非阻塞的。offer(E e)如果在数组满的情况下直接返回false。offer(E e, long timeout,
TimeUnit unit)为阻塞方式,则阻塞unit.toNanos(timeout)纳秒。

      poll()
方法也分两种,和上面的差不多。

      

public Iterator<E> iterator() {
final ReentrantLock lock = this.lock;
lock.lock();
try {
return new Itr();
} finally {
lock.unlock();
}
}

  
        可以看出在调用iterator()方法时,首先进行加锁,并返回一个Itr的实例。

        

Itr() {
lastRet = -1;
if (count == 0)
nextIndex = -1;
else {
nextIndex = takeIndex;
nextItem = items[takeIndex];
}
}

 
         该Itr实例包含了当前数组尾部的索引以及尾部的元素,调用完毕后释放锁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: