
源码分析
文章平均质量分 80
千念飞羽
这个作者很懒,什么都没留下…
展开
-
源码分析-java-AbstractList-Itr和ListItr的实现
AbstractListAPI文档AbstractList实现了List接口,又因为List继承自Collection,Collection继承自Iterable。因此List接口包含很多的方法。AbstractList实现了List接口的最小实现。 他是针对随机访问储存数据的方式的,如果需要使用顺序访问储存数据方式的List还有一个AbstractSequentialList它是继承自Abstr原创 2016-07-17 16:02:51 · 3140 阅读 · 0 评论 -
源码分析-HashMap
源码分析——HashMap原创 2016-12-18 21:08:19 · 587 阅读 · 0 评论 -
源码分析-LinkedBlockingQueue
LinkedBlockingQueueLinkedBlockingQueue是基于链表的阻塞FIFO队列,可以指定一个最大的长度限制以防止过度扩展,未指定情况下其大小为Integer.MAX_VALUE;提供比ArrayBlockingQueue更高的吞吐量但是在高并发条件下可预测性降低。原创 2016-12-27 10:45:13 · 2775 阅读 · 0 评论 -
源码分析-SynchronousQueue
SynchronousQueueSynchronousQueue作为阻塞队列的时候,对于每一个take的线程会阻塞直到有一个put的线程放入元素为止,反之亦然。在SynchronousQueue内部没有任何存放元素的能力。所以类似peek操作或者迭代器操作也是无效的,元素只能通过put类操作或者take类操作才有效。通常队列的第一个元素是当前第一个等待的线程。如果没有线程阻塞在该队列则poll会返回null。从Co原创 2017-01-05 21:18:42 · 3771 阅读 · 2 评论 -
源码分析-PriorityBlockingQueue
PriorityBLockingQueue-文档部分doc文档PriorityBlockingQueue是无界的阻塞队列。当然如果资源耗尽的看情况下也是会出现添加失败的情况。PriorityBlockingQueue提供的迭代器并不保证按照某一顺序顺序迭代所有元素(和有限队列一致,可以见另一篇博客源码分析-PriorityQueue)(它会先按数组迭代,然后再迭代漏掉的元素)。当两个元素相原创 2017-01-12 21:04:08 · 1362 阅读 · 0 评论 -
源码分析-CopyOnWriteArrayList
概述doc文档一个线程安全的ArrayList对于所有的可变操作都使用一个基于数组的新拷贝实现。 通常的情况下这样做的代价非常大,但是当遍历操作远远大于修改操作的时候这样做更有效率,或者当你不希望使用同步的方式遍历操作同时又希望可以排除并发干扰的时候也很有效。快照类型的迭代器使用给指向当迭代器创建的时候当前数组状态的引用。这个数组在整个迭代器的生命周期中都不变,所以同步干扰不会出现,而原创 2017-01-13 20:46:35 · 443 阅读 · 0 评论 -
源码分析-CyclicBarrier
CyclicBarrier从用法上来说,CyclicBarrier可能看出是CountDownLatch的高级版本,增加了重置的功能,对于多个线程的中断提供了通知的功能。具体的用法通过api就有比较详细的介绍。内部类Generation-如何实现重置功能的首先CyclicBarrier内部有一个内部静态类Generation。当然在每个CyclicBarrier实例中也有一个Generation域这原创 2017-02-16 13:31:01 · 3041 阅读 · 0 评论 -
源码分析-ConcurrentHashMap
一个支持并发的提取和修改的散列表。这个类和hashtable准守相同的规范,并且每个版本都对应相同的功能规范。虽然这是一个线程安全的类,但是他并不依赖于一个整体的锁,没有一个锁可以锁住整个元素而静止所有访问。这个类和hashtable可以互操作。提取操作如get。不会阻塞,所以有可能被更新方法锁覆盖,提取反映了最近完全操作的结果。对于聚合操作如果putAll和clea原创 2017-01-18 15:05:02 · 825 阅读 · 0 评论 -
源码分析-ThreadPoolExecutor
接口首先说一下几个Executor相关的接口Executor:这个接口的主要功能的使是的策略与机制的分离,主要就是可以将提交任务的线程和执行任务的线程分开,异步的进行。当然特殊情况下也是同步进行的。只有一个方法就是void execute(Runnable command)ExecutorService:这个接口功能就要复杂一些了,和Excutor的区别主要在两点: 提供了取消和原创 2017-02-13 14:39:53 · 643 阅读 · 0 评论 -
源码分析-Phaser
Phaser使用方法这是一个比CyclicBarrier更加灵活的同步屏障。从灵活性的角度来说Phaser>CyclicBarrier>CountDownLatch。Phaser中有一个概念叫阶段(用phaser)表示,这个只能增长不能减小。每个阶段可以有不同数量的分阶段(party,不知道怎么翻译了。先用这个)。当有足够数量的分阶段到达的时候就进入下一个阶段。获得Phaser原创 2017-02-23 22:35:34 · 1815 阅读 · 0 评论 -
源码分析-CountDownLatch
CountDownLatch基本用法CountDownLatch会接受一个初始化的int值count,通过调用await方法阻塞当前线程。通过其他线程调用countDown来降低当前状态值,当当前状态将至0 时,所有阻塞在CountDownLatch的线程都会立刻从await返回。CountDownLatch时一次性的,不可以重置,如果需要重置请使用CyclicBarrier。实现实现比较简单。就是原创 2017-02-15 20:05:58 · 460 阅读 · 0 评论 -
源码分析-Semaphor
semaphorejava中的Semaphore主要用来限制线程的数量。而不是用来限制资源的访问。Semaphore所拥有的集是非常抽象的集合。所以说Semaphore在获取和是否的过程中不会持有特定对象的锁。即使排除java的语义概念,锁和信号量,虽然都是基于等待唤醒机制,但是也是不同的同步组件。虽然锁可以用来做同步器,同步器可以用来做锁,但是信号量并没有所有者的概念。由于没有所有者的概念,信号量原创 2017-02-24 14:53:52 · 792 阅读 · 0 评论 -
源码分析-HashSet、LinkedHashSet
基本特性HashSet的是依靠组合一个HashMap实现的。然后讲大部分任务都委托给HashMap完成。 当然,HashSet不保证迭代顺序与添加顺序相同,而且也不保证其顺序不变。允许空元素。 对于其迭代器的迭代效率正比于(HashSet的内元素和HashSet的桶数量之和),因此如果对迭代效率要求比较高,就不要使用过大的初始大小。(这部分从HashSet本身的代码看不出来,今后分析Hash原创 2016-11-26 22:19:44 · 526 阅读 · 0 评论 -
源码分析-PriorityQueue
PriorityQueue实现的方式的源码分析。主要讲解了初始化过程,上滤和下移操作,remove方法以及迭代器的实现原创 2016-11-06 20:56:21 · 1756 阅读 · 0 评论 -
源码分析-java-AbstractCollection
AbstractCollection概述概述首先AbstractCollection是java自己提供的一个最基本的Collection的实现。当然它依然是一个抽象类。对于一个不可更改的集合,只要继承这个类并且实现迭代器和size()方法就行。对于一个可更改的集合,需要实现add和返回Iterator的方法,当然可选的实现remove方法通常应该提供两个构造器,一个无参的,一个是包含集合元素的pub原创 2016-07-16 16:37:52 · 3212 阅读 · 3 评论 -
源码分析-java-Iterator接口和Iterable<T>接口
API文档:首先Iterator的出现是为了替代Enumeration.它和Enumeration不同的是,它可以删除迭代的内容。并且被更好的命名这个接口只有四个方法: boolean hasNext() E next() default void remove() default void forEachRemaining(Consumer源码分析:d原创 2016-07-16 14:46:56 · 1449 阅读 · 0 评论 -
源码分析-java-collection接口
以下内容是api资料的简单汇总:API概述Collection接口是集合继承的根,一个集合表示一组对象,即元素,的集合。Collection是一个抽象层次比较高的类,java没有提供直接的实现,通常都是对子类提供实现。一般的Collection实现应该提供两种标准的构造器: 一个是无参构造器,用于创建一个空集合 另一个是有参的构造器,参数为集合内集合内元素。(当然这个方法并没有办法提供强制类型转原创 2016-07-13 18:24:49 · 452 阅读 · 0 评论 -
源码分析-TreeMap
TreeMap概述首先TreeMap是实现了NavigableMap和SortMap的Map,从实现的角度说是红黑树。红黑树红黑树是平衡搜索树的一种,也是使用最多的一种树,其特点对于所有的动态集合操作都可以保证以最坏O(lgn)的时间复杂度来运行。每个节点都包含一个储存位来表示节点的颜色,非红即黑。通过对任何一条从根节点到叶子节点的简单路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其原创 2016-12-22 15:01:32 · 880 阅读 · 0 评论 -
源码分析-ArrayBlockingQueue
ArrayBlockingQueue阻塞队列:首先作为阻塞队列的第一个类,这里还是简要说明下阻塞队列。 阻塞队列都是线程安全类,可以通过put和take阻塞在满队列或者空队列上。阻塞队列不允许空元素。 java中阻塞队列有这几类: ArrayBlockingQueue:数组构成的有界阻塞队列固定长度FIFO DelayQueue:是一个无界的队列,只有到达一定延时之后才能被取走。FIFO原创 2016-12-23 15:55:48 · 419 阅读 · 0 评论 -
源码分析-java-AbstractList-subList、RandomAccess、equals和hashCode
上一个小结说完了AbstractList的迭代器Itr和ListItr的实现。 这一小结把RandomAccess和subList说完。RandomAccess首先说明一些RandomAccess接口。 这个接口没有任何需要实现的方法。这中类型的接口其实在java中比较常见。API文档List实现的标记方法用来指示他们支持快速随机访问(通常是常数时间)。这个接口的主要目的是原创 2016-07-19 15:43:31 · 1002 阅读 · 0 评论 -
源码分析-java-AbstractSequentialList
AbstractSequentialListAPI文档这个类提供了一个基本的List接口实现,为实现序列访问的数据储存结构的提供了所需要的最小化的接口实现。对于支持随机访问数据的List比如数组,应该优先使用AbstractList。这里类是AbstractList类中与随机访问类相对的另一套系统,采用的是在迭代器的基础上实现的get、set、add和remove方法。为了实现这个列表。仅仅需要拓展原创 2016-07-19 17:28:40 · 2713 阅读 · 0 评论 -
源码分析-java-LinkedList
LinkedListAPI文档LinkedList是一个基于双向链表的List和Deque的实现。对所有元素(包括null内)实现了所有可选的操作。所有的操作性能可以从双端队列的list来估计。基于下标的操作需要从list的头或者尾(根据具体位置)遍历到相应的位置才可以特别注意这个实现不是同步的。如果多线程访问同时访问一个list,且只是有一个线程结构性的调整了list,这样的操作需要外部特性保持同原创 2016-07-21 21:27:01 · 1916 阅读 · 0 评论 -
源码分析-java-ArrayList-基本方法及实现
ArrayListAPI文档大小的可变数组的List接口的实现。实现了所有的List可选操作,允许所有(包括null)在内的元素。为了实现这List接口,这个类提供了操作数组(这个数组用于内部储存)大小的方法。(这个类类似于Vector,只是这个类不是同步的)size、isEmpty、get、set、Iterator和ListIterator以固定的时间运行。add操作的摊还时间为添加n个操作需要O原创 2016-07-25 18:08:01 · 1751 阅读 · 0 评论 -
源码分析-java-Vector、Stack-与ArrayList的相关性
VectorVector的源码和ArrayList的非常类似,几乎就一个ArrayList的翻版。没有必要再一条一条的梳理,而两者的区别主要在于三点:Vector每次元素超过内置的数组时,内置数组的扩大方式和ArrayList略有区别Vector是一个线程同步的方法Vector的域都是protected的,因为stack的实现继承自Vector,而ArrayList的域基本上是private或原创 2016-08-12 16:12:55 · 936 阅读 · 0 评论 -
源码分析-FutureTask
介绍FutureTask的实现原理。原创 2017-02-26 14:36:22 · 692 阅读 · 0 评论