随笔分类 -  java.util.concurrent包源码分析

摘要:concurrent包中Executor接口的主要类的关系图如下:Executor接口非常单一,就是执行一个Runnable的命令。public interface Executor { void execute(Runnable command);}ExecutorService接口扩展了E... 阅读全文
posted @ 2014-08-13 14:34 梧留柒 阅读(2002) 评论(0) 推荐(1) 编辑
摘要:CopyOnWriteArrayList和CopyOnWriteArraySet从数据结构类型上来说是类似的,都是用数组实现的保存一组数据的数据结构,区别也简单就是List和set的区别。因此这里就先讨论CopyOnWriteArrayList,然后再说CopyOnWriteArraySet。这里重... 阅读全文
posted @ 2014-08-12 14:36 梧留柒 阅读(1631) 评论(0) 推荐(0) 编辑
摘要:这篇文章来说说稍微复杂一些的LinkedBlockingQueue。LinkedBlockingQueue使用一个链表来实现,会有一个head和tail分别指向队列的开始和队列的结尾。因此LinkedBlockingQueue会有两把锁,分别控制这两个元素,这样在添加元素和拿走元素的时候就不会有锁的... 阅读全文
posted @ 2014-08-11 14:10 梧留柒 阅读(1885) 评论(0) 推荐(0) 编辑
摘要:对于BlockingQueue的具体实现,主要关注的有两点:线程安全的实现和阻塞操作的实现。所以分析ArrayBlockingQueue也是基于这两点。对于线程安全来说,所有的添加元素的方法和拿走元素的方法都会涉及到,我们通过分析offer方法和poll()方法就能看出线程安全是如何实现的。首先来看... 阅读全文
posted @ 2014-08-10 18:45 梧留柒 阅读(1438) 评论(0) 推荐(0) 编辑
摘要:想必大家都很熟悉生产者-消费者队列,生产者负责添加元素到队列,如果队列已满则会进入阻塞状态直到有消费者拿走元素。相反,消费者负责从队列中拿走元素,如果队列为空则会进入阻塞状态直到有生产者添加元素到队列。BlockingQueue就是这么一个生产者-消费者队列。BlockingQueue是Queue的... 阅读全文
posted @ 2014-08-09 15:49 梧留柒 阅读(1933) 评论(0) 推荐(0) 编辑
摘要:Java集合框架中的Map类型的数据结构是非线程安全,在多线程环境中使用时需要手动进行线程同步。因此在java.util.concurrent包中提供了一个线程安全版本的Map类型数据结构:ConcurrentMap。本篇文章主要关注ConcurrentMap接口以及它的Hash版本的实现Concu... 阅读全文
posted @ 2014-08-08 14:55 梧留柒 阅读(2952) 评论(2) 推荐(1) 编辑
摘要:Condition接口应用场景:一个线程因为某个condition不满足被挂起,直到该Condition被满足了。类似与Object的wait/notify,因此Condition对象应该是被多线程共享的,需要使用锁保护其状态的一致性示例代码:class BoundedBuffer { fi... 阅读全文
posted @ 2014-07-10 15:42 梧留柒 阅读(4861) 评论(0) 推荐(0) 编辑
摘要:Aomic数据类型有四种类型:AomicBoolean,AomicInteger,AomicLong, 和AomicReferrence(针对Object的)以及它们的数组类型,还有一个特殊的AomicStampedReferrence,它不是AomicReferrence的子类,而是利用Aomic... 阅读全文
posted @ 2014-07-10 15:27 梧留柒 阅读(5040) 评论(1) 推荐(0) 编辑
摘要:准备花点时间阅读一下java.util.concurrent这个包里面的java代码,大致看了一下,这个包我个人觉得大致可以分为五个部分(如有不对之处,还望指正)第一部分 Aomic数据类型这部分都被放在java.util.concurrent.atomic这个包里面,实现了原子化操作的数据类型,包... 阅读全文
posted @ 2012-12-14 16:42 梧留柒 阅读(6456) 评论(3) 推荐(2) 编辑