ReentrantLock 是 Lock 的一个子类,和 synchronize 一样称之为可重入锁,它有着和 synchronize 同样的内存语义,但功能比 synchronize 功能更多,使用起来更为灵活。
可重入锁:能够支持对资源的重复加锁,一个典型例子就是同一个类的 synchironized 方法内可以调用本类其他的 synchronize 方法。
使用 Reentrant...
锁是用来控制多线程访问共享资源的一种方式,一般情况下,锁可以防止多个线同时访问共享资源,但有些锁可以允许多个线程并发地访问共享资源,如读写锁中的读锁。
Lock 接口一般情况下,我们常用 synchronized 关键字来实现锁的功能,前面提到 synchronize 关键字是利用对象监视器来实现同步,synchronize获取锁和释放锁很固定,就是先获取再释放,虽然简便了同步化管理,但是不...
在并发编程中,synchronized 关键字非常常见,在 JDK 源码中也有很多,典型基础的类有 StringBuffer,我们知道 StringBuilder 是非线程安全的,StringBuffer 是线程安全的,就是因为 StringBuffer 源码的一些方法上使用了synchronized 关键字来保证同步。
synchronized关键字原理synchronized 代码块同步...
是前面分析了 HashMap 源码,今天分析下 LinkedHashMap,废话不多说直接开始。
LinkedHashMap众所周知,HashMap 里的元素是无序的。如果想按照一定的顺序,比如插入顺序来访问元素,就需要 LinkedHashMap 这个集合来实现了,LinkedHashMap 相较于 HashMap 最大的特点就是元素有序。
LinkedHashMap 的构造方法是基于 H...
在复习完 HashMap 后,今天学习 HashSet,在日常开发中我们常用它来存储不重复元素, HashSet 是基于 HashMap 的,它巧妙地利用了 HashMap 的 key 不可重复的特性,我们在向 HashSet 中添加元素时,实际上是把添加的元素当做 HashMap 的 key ,当有重复的元素进来时,表示 HashMap 中存在相同的 key,新的value 会覆盖原来的v...
HashMap 也是一个非常重要的key-value 映射集合,在开发中经常用到,底层是数组+单向链表的数据结构。在jdk1.7 和 1.8中实现略有不同,jdk8引入红黑树,提升了查询性能,并在扩容算法上做了优化,省去重新计算hash 的时间。
HashMap 数据结构图jdk1.7:
jdk1.8:
HashMap 源码(1.8)核心属性12345678910111213141516...
前面写了点 ArrayList 一些源码的分析,今天分析下 LinkedList 集合常用 API 的源码。
LinkedList 和 ArrayList 都是 List接口的实现类,都是线程不安全、允许元素为 null 的。这俩集合经常被拿来进行比较,面试问的也比较多。这里先给出这俩在一般情况下的区别:
ArrayList 底层是数组结构,增删慢(涉及数组的复制和元素移动),改查快(实现...
java集合框架图:
Collection 接口下的 Queue接口,打算以后放到多线程那块分析,今天来分析下 ArrayList类
ArrayListArrayList集合是 java.util 包下最常用的集合类,它的继承结构如下:
12public class ArrayList<E> extends AbstractList<E> implem...
背景今天搭建公司SpringBoot基础框架时,在设计自定义异常阶段,参考其他框架优秀源码发现都是继承了 RuntimeException,为何不直接继承 Exception 呢?特此记录一下这样做的好处。
Exception我们知道异常分为两类:检查异常CheckedException 和运行时异常RuntimeException。
CheckedException
Java认为Check...
前言在微服务系统里,随着业务的发展,服务拆分成越来越多的微服务时,服务之间的调用关系也越来越复杂,经常一个业务流程要调用 N 个微服务才能完成,当一个业务流程请求变慢或者卡死时,我们需要知道到底是哪里调用出现了问题,所以需要服务链路追踪功能,帮助我们解决问题,Spring CLoud Sleuth应运而生。
Spring CLoud SleuthSpring CLoud Sleuth是一个服...