PriotityBlockingQueue源码解析 Posted on 2020-05-05 | In 源码 Words count in article: 3.7k | Reading time ≈ 19 PriotityBlockingQueue源码解析PriotityBlockingQueue是待优先级的无界阻塞队列,每次出队都返回优先级最高或者最低的元素。其内部是使用平衡二叉树堆实现的,所以直接遍历队列元素不保证有序。默认使用对象的compareTo方法提供比较规则,如果需要自定义比较规则,可以 ... Read more »
StampedLock解析 Posted on 2020-05-05 | In Java Words count in article: 1.4k | Reading time ≈ 5 StampedLock解析在Java中,有一个可重入的读写锁ReentrantReadWriteLock,它是一种读写分离的锁,在读或者写的时候,会把写或者读操作先阻塞。但是在读操作和读操作之前却不加锁。即,读操作和写操作是互斥的,但是读操作和读操作之间不是。 这样会存在一个问题,在读操作远大于写操 ... Read more »
LockSupport源码解析 Posted on 2020-05-04 | In 源码 Words count in article: 1.4k | Reading time ≈ 6 LockSupport源码解析LockSupport是JDK在rt包里面提供的一个工具类,它的主要作用是挂起和唤醒线程。LockSupport是创建锁和其他同步类的基础。 LockSupport类与每个使用它的线程都会关联一个许可(permit),permit的值只有0或1,默认是0. 当前用un ... Read more »
LongAdder源码解析 Posted on 2020-05-03 | In 源码 Words count in article: 2.4k | Reading time ≈ 11 LongAdder源码解析AtomicLong类通过CAS提供了非阻塞的原子性操作,相比使用synchronized来说,性能已经有了很大的提升。但是,在高并发的场景下,大量线程同时使用AtomicLong时,只能有一个线程能成功,其他线程只能通过自旋获取新的值,再后续更新自己的值。这期间就浪费了大 ... Read more »
ThreadLocalRandom源码解析 Posted on 2020-05-03 | In 源码 Words count in article: 1.4k | Reading time ≈ 5 ThreadLocalRandom源码解析Random类通过以下逻辑获取下一个随机数,以获取下一个整数为例: 12345678910111213141516171819public int nextInt(int bound) { // 参数检查 if (bou ... Read more »
LongAdder源码解析 Posted on 2020-05-03 | In 源码 , 多线程 , CAS Words count in article: 1.2k | Reading time ≈ 5 LongAdder源码解析AtomicLong类通过CAS提供了非阻塞的原子性操作,相比使用synchronized来说,性能已经有了很大的提升。但是,在高并发的场景下,大量线程同时使用AtomicLong时,只能有一个线程能成功,其他线程只能通过自旋获取新的值,再后续更新自己的值。这期间就浪费了大 ... Read more »
ThreadLocal源码解析 Posted on 2020-05-02 | In 源码 Words count in article: 2.5k | Reading time ≈ 11 ThreadLocal源码解析多线程访问同一个共享变量时特别容易出现并发问题,特别是在多个线程需要对一个共享变量进行写入时。为了保证线程安全,一般使用者在访问共享变量时需要进行适当的同步。同步的措施一般是加锁,这就需要使用者对锁有一定的了解,这显然加重了使用者的负担。 JDK包提供了ThreadLo ... Read more »
Spring Cloud Gateway入门 Posted on 2020-04-29 | In Spring Cloud Words count in article: 2.9k | Reading time ≈ 13 Spring Cloud Gateway入门Spring Cloud Gateway是Spring官方基于Spring5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效且统一的API路由管理方式 ... Read more »
面试题 03.02. 栈的最小值 Posted on 2020-04-29 | In leetcode Words count in article: 209 | Reading time ≈ 1 题目请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。 示例1:12345678MinStack minStack = new MinStack();minStack.push(-2);m ... Read more »
面试题 05.06. 整数转换 Posted on 2020-04-29 | In leetcode Words count in article: 135 | Reading time ≈ 1 题目整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。 示例1:12输入:A = 29 (或者0b11101), B = 15(或者0b01111)输出:2 示例2:12输入:A = 1,B = 2输出:2 提示: A,B范围在[-2147483648, 2147483647]之 ... Read more »