摘要: 本文将主要结合源码对 JDK 中的阻塞队列进行分析,并比较其各自的特点; 一、BlockingQueue 概述 说到阻塞队列想到的第一个应用场景可能就是生产者消费者模式了,如图所示; 根据上图所示,明显在入队和出队的时候,会发生竞争;所以一种很自然的想法就是使用锁,而在 JDK 中也的确是通过锁来实 阅读全文
posted @ 2019-04-11 11:33 三枣 阅读(722) 评论(0) 推荐(1) 编辑
摘要: 本文将主要讲解 J.U.C 中的 Future 框架,并分析结合源码分析其内部结构逻辑; 一、Future 框架概述 JDK 中的 Future 框架实际就是 Future 模式的实现,通常情况下我们会配合线程池使用,但也可以单独使用;下面我们就单独使用简单举例; 1. 应用实例 打印: 如上面代码 阅读全文
posted @ 2019-04-07 19:25 三枣 阅读(873) 评论(0) 推荐(0) 编辑
摘要: 本文将主要讲述 的内部结构和实现逻辑,在看本文之前最好先了解一下 队列锁, 就是根据 队列锁的变种实现的,因为本身 比较复杂不容易看清楚他本身的实现逻辑,所以查看 队列锁的实现,可以帮助我们理清楚他内部的关系;关于队列锁的内容可以参考 , "CLH、MCS 队列锁简介" ; 一、AQS 结构概述 在 阅读全文
posted @ 2019-04-04 20:51 三枣 阅读(1288) 评论(0) 推荐(1) 编辑
摘要: 这篇博客主要是作为 AbstractQueuedSynchronizer 的背景知识介绍;平时接触也非常的少,如果你不感兴趣可以跳过;但是了解一下能更加的清楚 AQS 的设计思路; 一、自旋锁简介 通常情况下解决多线程共享资源逻辑一致性问题有两种方式: 互斥锁:当发现资源被占用的时候,会阻塞自己直到 阅读全文
posted @ 2019-03-20 20:42 三枣 阅读(6233) 评论(0) 推荐(3) 编辑
摘要: 本文将主要结合源码讲述 ThreadLocal 的使用场景和内部结构,以及 ThreadLocalMap 的内部结构;另外在阅读文本之前只好先了解一下引用和 HashMap 的相关知识,可以参考 "Reference 框架概览" 、 "Reference 完全解读" 、 "HashMap 相关" ; 阅读全文
posted @ 2019-03-15 11:03 三枣 阅读(3831) 评论(0) 推荐(1) 编辑
摘要: 本文主要结合 源码,梳理 Java 线程的整体脉络; 一、线程概述 对于 Java 中的线程主要是依赖于系统的 API 实现的,这一点可以从 ;源码中关键的方法都是 方法看出,也可以直接查看 OpenJDK 源码看出来,这一点后面还会讲到;对于 JDK1.8 而言,他的 Windows 版和 Lin 阅读全文
posted @ 2019-03-14 10:36 三枣 阅读(1778) 评论(0) 推荐(1) 编辑
摘要: 本文将主要讲述平衡二叉树中的红黑树,红黑树是一种我们经常使用的树,相较于 AVL 树他无论是增加还是删除节点,其结构的变化都能控制在常树次;在 JDK 中的 TreeMap 同样也是使用红黑树实现的; 一、结构概述 红黑树是在AVL 树平衡条件的基础上,进一步放宽条件,从而使得红黑树在动态变化的时候 阅读全文
posted @ 2019-03-11 11:38 三枣 阅读(1203) 评论(0) 推荐(3) 编辑
摘要: 本文将主要讲述另一种树形结构, B 树 ;B 树是一种 多路平衡查找树 ,但是可以将其理解为是由二叉查找树合并而来;它主要用于在不同存储介质之间查找数据的时候,减少 I/O 次数(因为一次读一个节点,可以读取多个数据); 一、结构概述 B 树,多路平衡查找树,即有多个分支的查找树;如图所示: B 树 阅读全文
posted @ 2019-03-07 16:41 三枣 阅读(707) 评论(0) 推荐(1) 编辑
摘要: 本文将主要讲述 BBST 家族的另一种相对奇特的树, 伸展树 ;伸展树的相较于其他的 BBST,结构更加简单,因为伸展树不需要平衡因子、颜色等信息,他的节点就是 BST 的节点,同时他甚至没有时刻维护全树的平衡状态,却仍然能保持各项操作达到分摊 ; 一、结构概述 伸展树的结构和二叉树完全相同,只是在 阅读全文
posted @ 2019-03-05 14:19 三枣 阅读(712) 评论(1) 推荐(0) 编辑
摘要: 本文将主要讲解平衡二叉树中的 AVL 树,其中将重点讲解二叉树的重平衡方法,即左旋和右旋,以及 3+4 重构;这些方法都是后面要讲的 B 树,红黑树等 BBST 的重要基础;此外在看本文之前最好先看一下 "二叉搜索树" ; 一、结构概述 前一篇博客里面讲了,二叉树同时具有 向量的静态查找 和 列表的 阅读全文
posted @ 2019-03-02 22:44 三枣 阅读(790) 评论(0) 推荐(1) 编辑
摘要: 本文将主要以动图方式展示二叉搜索树的结构,以及动态操作;但是对于基本的概念和性质则不会有过多的提及,如果想系统了解建议查看邓俊辉老师的《数据结构》课程; 一、结构概述 二叉树:融合了 向量的静态操作 (二分查找)和 列表的动态操作 (插入和删除)的优点;使得树成了应用广泛的数据结构; 二叉搜索树:即 阅读全文
posted @ 2019-02-27 17:01 三枣 阅读(1035) 评论(0) 推荐(2) 编辑
摘要: 对于泛型的使用我想大家都非常熟悉,但是对于类型擦除,边界拓展等细节问题,可能不是很清楚,所以本文会重点讲解一下;另外对泛型的了解其实可以看出,一个语言特性的产生逻辑,这对我们平时的开发也是非常有帮助的; 一、为什么会出现泛型 首先泛型并不是Java的语言特性,是直到 JDK1.5 才支持的特性(具体 阅读全文
posted @ 2019-02-21 20:24 三枣 阅读(1261) 评论(0) 推荐(0) 编辑
摘要: 本文的目的并不是让你对 更加了解,然后灵活运用;因为 的一个历史遗留的类,目前并不建议使用,所以本文主要和 对比,感受同样功能的不同实现,知道什么是好的代码;所以在阅读本文之前最好先了解一下 ,可以参考 "HashMap 相关" ; 一、 类定义 可以看到它和 虽然都是哈希表,但是结构完全不一样,他 阅读全文
posted @ 2019-02-13 20:48 三枣 阅读(452) 评论(0) 推荐(1) 编辑
摘要: 平时我们使用最多的数据结构肯定是 HashMap,但是在使用的时候我们必须知道每个键值对的生命周期,并且手动清除它;但是如果我们不是很清楚它的生命周期,这时候就比较麻烦;通常有这样几种处理方式: 由一个线程定时处理,可以是 或者 ; 利用重写 ,实现 FIFOCache 或者 LRUCache;可以 阅读全文
posted @ 2019-02-12 21:14 三枣 阅读(707) 评论(0) 推荐(0) 编辑
摘要: 在阅读本文之前最好对 Reference 框架有一个整体的把握,可以参考我上一篇博客 "Reference 框架概览" ;本文主要讲了 的子类实现和应用( ); Java 引用的强弱关系 : 一、StrongReference 强引用 :我们通常使用的引用,形如 此时从 stack 中的 o,到 h 阅读全文
posted @ 2019-01-31 18:36 三枣 阅读(1183) 评论(0) 推荐(0) 编辑