源码解析
文章平均质量分 77
yanghan1222
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap源码解析(JDK1.8)
HashMap是我们很常用的一个集合类。但在并发编程中使用HashMap可能会导致程序死循环(1.8不会),而使用HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。 温馨提示:源代码来自JDK1.8一、ConcurrentHashMap的常量//最大容量private static final int MAXIMUM_CAPAC...原创 2018-05-10 00:18:54 · 178 阅读 · 0 评论 -
ArrayBlockingQueue源码解析(JDK1.8)
ArrayBlockingQueue是一个基于用数组实现的有界阻塞队列。此队列按照先进先出的原则对元素进行排序一、成员变量//存放元素的数组final Object[] items;//队头int takeIndex;//队尾int putIndex;//队列中的元素个数int count;//final ReentrantLock lock;//监视队列是否为空的监视...原创 2018-05-12 23:23:53 · 339 阅读 · 0 评论 -
ConcurrentLinkedQueue源码解析(JDK1.8)
实现线程安全的队列有两种方式:一种基于阻塞的实现,用锁实现;另一种是基于非阻塞的实现,使用循环CAS实现。ConcurrentLinkedQueue就是基于非阻塞的方式实现的一、属性变量//队头private transient volatile Node<E> head;//队尾private transient volatile Node<E> tail;...原创 2018-05-12 22:51:27 · 678 阅读 · 0 评论 -
ReentranLock源码解析
重入锁ReentranLock,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁还支持获取锁时的公平性和非公平性选择。一、属性变量private final Sync sync; 定义在ReentranLock中的一个类,该类实现了AQS。并且有两个子类,分别是公平锁和非公平锁。根据需要可以创建不同的锁。二、内部类1、Sync类abstract static class S...原创 2018-05-12 21:02:33 · 380 阅读 · 0 评论 -
Semphore源码解析
Semphore(信号量)是用来控制同时访问特定资源的线程数量。 那么它到底是如何实现的呢,让我们点开源码一探究竟吧。一、属性变量private final Sync sync; 属性变量只有一个,那就是Sync类的对象二、内部类 1、Sync类abstract static class Sync extends AbstractQueuedSynchronizer ...原创 2018-05-11 16:07:33 · 219 阅读 · 0 评论 -
CountDownLatch源码解析
在看这篇博客之前,建议大家将AQS源码理清楚再来看。当然,我之前的博客中有写AQS。若你将AQS没搞懂,这里看起来就不容易理解,不然你看CountDownLatch的源码将很简单 CountDownLatch是通过一个计数器来实现的,当我们在new 一个CountDownLatch对象的时候需要带入该计数器值,该值就表示了线程的数量。每当一个线程完成自己的任务后,计数器的值就会减1。...原创 2018-05-11 14:55:53 · 163 阅读 · 0 评论 -
ThreadLocal源码解析(JDK1.8)
变量值的共享可以使用public static变量的形式,所有线程可以共享一个变量。如果我们想实现一个线程都有自己的共享变量该如何解决呢,这里就要用到Java中的ThreadLocal类。 类ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每个线程的私有数据 我们先看下列代码public stati...原创 2018-05-06 21:54:48 · 322 阅读 · 0 评论 -
HashSet源码解析(JDK1.8)
在我们学过HashMap之后,再来看HashSet就很easy了。因为HashSet是基于HashMap是实现的。打开HashSet的源码,可以看到维护了一个HashMap一、成员变量//用来存储HashSet的元素private transient HashMap<E,Object> map;//这个Object是用来填充HashMap的value的。private stati...原创 2018-05-05 10:36:27 · 150 阅读 · 0 评论 -
inkedHashMap源码解析(JDK1.8)
在使用HashMap时,因为其插入的顺序是随机的,而我们又想按照插入的顺序进行遍历。那我们可以使用LinkedHashMap。今天看看LinkedHashMap的源码,看是如何HashMao的插入有序。一、构造public class LinkedHashMap<K,V> extends HashMap<K,V> 首先它是继承与HashMap的,但要实现插入顺...原创 2018-05-05 00:28:43 · 281 阅读 · 0 评论 -
HashMap源码解析(JDK1.8)
说起HashMap,大家可能都不陌生,因为它的使用场景很广泛。今天让我们来追寻一下HashMap(JDK1.8)的实现,我采用源码加注释来解读,还请耐下心看下去。一、基本参数//默认的初始容量为16,而且容量必须是2的幂static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;//最大容量为2的30次方,如果你在构造方法中给了更大的值,则...原创 2018-05-04 21:38:13 · 152 阅读 · 0 评论 -
LinkedBlockingQueue源码解析(JDK1.8)
LinkedBlockingQueue是一个用链表实现的有界队列。此队列的默认长度和最大长度为Integer.MAX_VALUE。一、属性变量//队列容量private final int capacity;//队列中的元素个数private final AtomicInteger count = new AtomicInteger();//队头transient Node<...原创 2018-05-13 00:59:58 · 284 阅读 · 0 评论