JDK源码解析
JDK源码解析
恐龙弟旺仔
保持热爱,保持进步
展开
-
JDK源码解析之ThreadPoolExecutor
前言: 线程池的使用在java开发中屡见不鲜,我们一般会这样使用// 1.创建一个固定线程数的线程池ExecutorService threadPool = Executors.newFixedThreadPool(5);// 2.提交任务threadPool.submit(new Runnable() { @Override public void run(...原创 2019-01-17 16:25:42 · 451 阅读 · 0 评论 -
JDK源码解析之LockSupport
前言: 之前关于AQS和ReentrantLock的介绍中,在获取锁和释放锁的操作中,有一个类被反复使用到,就是LockSupport.java 在AQS.lock()方法中,调用到了LockSupport.park(Object blocker)方法 在AQS.unlock()方法中,调用到了LockSupport.unpark(Thread thread)方法...原创 2019-01-16 12:01:01 · 441 阅读 · 0 评论 -
JDK源码解析之ReentrantLock
前言: 之前说过,JDK有两种锁的方式,一种是Synchronized,一种就是CAS 基于CAS实现的Unsafe我们无法直接使用,我们一般就是使用ReentrantLock来实现锁的功能 那么本文我们就来看下ReentrantLock是如何实现CAS锁的 建议读者也看一下关于AbstractQueuedSynchronizer的源码解析,AQS作为...原创 2019-01-15 18:06:12 · 406 阅读 · 0 评论 -
JDK源码解析之AtomicInteger及CAS
前言: JDK中的锁大致可以分为两类:Synchronized和CAS。 CAS的使用中,有直接使用的,比如AtomicInteger;有间接使用的比如ReentrantLock。 本文就说一下直接使用CAS的AtomicInteger类,看其是如何直接使用的 1.CAS CAS是Compare and Swap(比较并交换)的简称 CAS...原创 2019-01-15 18:00:44 · 370 阅读 · 0 评论 -
JDK源码解析之AbstractQueuedSynchronizer
前言: JDK中的锁大致可以分为两类:Synchronized和CAS。 CAS的使用中,有直接使用的,比如AtomicInteger;有间接使用的比如ReentrantLock。关于AtomicInteger的分析可参考笔者的上一篇博客: CAS间接实现的典型代表是ReentrantLock和ReentrantReadWriteLock。 本文先不具体介绍...原创 2019-01-15 17:56:58 · 372 阅读 · 0 评论 -
JDK源码解析之HashSet
前言: 集合类型三巨头:List、Set、Map 在之前的博客中已经讲了关于List的实现类、Map的实现类,现在还有Set相关的没有介绍过了。 为什么先介绍Map后介绍Set呢?按理说Set应该比Map的实现更简单点啊? 当然,这是笔者的一点小心思,看过源码的都知道,Set是基于Map来实现的,所以想了解Set,必须先了解Map ...原创 2019-01-10 17:32:54 · 257 阅读 · 0 评论 -
JDK源码解析之LinkedHashMap
前言: 在上一篇博客中,我们系统的介绍了HashMap,HashMap是非线程安全的类,一般情况下作为局部变量使用是完全可以的。 HashMap的存放是无序的,按照一定的规则映射的,所以,遍历其元素的顺序与添加的顺序是不一致的。 如果我们想按照添加的顺序来遍历元素该如何做呢? 那就需要使用本次介绍的LinkedHashMap来完成了。 注意:由于...原创 2019-01-10 17:28:45 · 263 阅读 · 0 评论 -
JDK源码解析之HashMap
前言: 关于HashMap的源码解析网上已经有很多大神级别的文章,看的笔者心生敬佩,真心不敢写了。 但是每次聊到HashMap的时候,总会有知识点是模糊的,应该还是眼高手低的缘故,所以还是决心写一下(很多参考大神的文章) 注意:笔者的JDK是1.8.3版本的,所以包括之前写的JDK源码解析系列都是这个版本的 1.有关于哈希表 哈希表这种数据结构,本质...原创 2019-01-10 11:08:28 · 451 阅读 · 0 评论 -
JDK源码解析之ArrayBlockingQueue
前言: 之前介绍的关于Queue的实现类,LinkedList、PriorityQueue都是非线程安全的队列,那么有没有线程安全的Queue实现类呢? 当然是有的,在java.util.concurrent中有几个关于Queue的线程安全实现/** * @see java.util.concurrent.ArrayBlockingQueue * @see java....原创 2019-01-08 16:30:59 · 350 阅读 · 0 评论 -
JDK源码解析之Queue与其实现类PriorityQueue
前言: 前文介绍了Stack这种数据结构类型,它符合后进先出(LIFO)的操作顺序。 今天介绍与其相反操作顺序的一种数据结构,Queue(队列),它符合先进先出(FIFO)的操作顺序 从网络上截一个图(如有侵权,请联系作者),简单表示下队列结构 a1是最先进入队列的元素,现在排在队头,an是最后入队的元素,排在队尾 执行出队操作的时候,最先进...原创 2019-01-08 16:24:25 · 367 阅读 · 0 评论 -
JDK源码解析之Stack
前言: Stack一般来说用的比较少点,因为其数据结构特殊性,所以在一些特殊的场景,还是能发挥出巨大作用的。 Stack(栈):参照java.util.Stack的注释来看,它具有后进先出的特性(LIFO)。 从网络上截一个图(如有侵权,请联系作者),简单表示下链表结构 可以看到,其主要操作就是入栈和出栈操作,a0元素是最早入栈的,现在在栈底,an是最后...原创 2019-01-08 16:20:37 · 350 阅读 · 0 评论 -
JDK源码解析之CopyOnWriteArrayList
前言: 之前介绍了关于List的常用两种实现类:ArrayList、LinkedList。也从源码的角度介绍下这两种List的使用场景。 但是在多线程的场景中,这两种List类型就不适合使用了。我们需要使用多线程安全的List类来完成集合操作。 JDK也会我们提供了线程安全的List。本篇文章就介绍下Vector和CopyOnWriteArrayList...原创 2019-01-08 16:17:17 · 431 阅读 · 0 评论 -
JDK源码解析之LinkedList
前言: 上一篇博客 介绍了我们最常用的一种集合类型ArrayList,看完源码之后,我们知道,其底层是基于数组来实现的。 今天介绍一下另外一种List,底层是基于链表来实现的。 从网络上截一个图(如有侵权,请联系作者),简单表示下链表结构 可以看到,证个链表有head和tail元素,每一个元素都有element(当前元素值)、pre(指向上一个元素)、...原创 2019-01-08 16:11:57 · 328 阅读 · 0 评论 -
JDK源码解析之ArrayList
前言: 之前写了关于Mybatis、Spring、Tomcat的源码解析,现在准备开始写一下JDK的源码解析系列文章。 网络上已经有很多大神级的JDK类解析文章,相比而言,无论是深度还是文笔都让笔者自惭形秽。 但是为了让自己对JDK源码的印象更加深刻,所以还是准备献丑了。 从自己的角度来描述一下对JDK相关类的理解,欢迎指正 从网络上截一个图...原创 2019-01-08 16:07:10 · 387 阅读 · 0 评论