并发
记录java多线程相关博客
有盐先生
唯有执着,方得始终!努力做一个有思考的程序员。
展开
-
深入理解PriorityQueue实现原理、及源码分析
PriorityQueue是使用Object[]数组实现的一个优先队列,是线程不安全的。它与FIFO的队列的区别在于,优先队列每次出队的元素都是优先级最高的元素。那么怎么确定哪一个元素的优先级最高呢?PriorityQueue使用堆这种数据结构,加上用户自定义的Comparator来确定每次出队的元素总是队列里面最小的,这里Comparator就相当于指定优先级。所以我们先来看看堆这种数据结构。...原创 2020-08-08 17:51:40 · 1445 阅读 · 0 评论 -
Condition实现原理和源码分析
在AQS中存在两个FIFO队列:同步队列 和 等待队列。本篇文章主要是讲condition实现原理(即等待队里),同步队列实现原理看这篇文章:深入理解AQS实现原理和源码分析。等待队列是由Condition内部实现的,是一个虚拟的FIFO单向队列,在AQS中同步队列、等待队列组成关系如下图: (1)AQS中tail 和 head主要构成了一个FIFO双向的同步队列。 (2)AQS中condition构成了一个FIFO单向等待队列。condition是AQS内部类,每个Condition对原创 2020-05-31 14:55:47 · 540 阅读 · 1 评论 -
ReentrantReadWriteLock实现原理及源码分析
ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行lock()方法后的任务,这就会出现一个弊端,比如在一些环境里多个线程都是读操作,没有涉及到数据的变更,那么多个读并发时效率就非常低;为了解决这种少写多读场景下的性能问题,JDK中设计了一种读写锁ReentrantReadWriteLock(可重入读写锁)。在读写锁中锁的策略有两种:公平策略和非公平策略。1.ReentrantReadWriteLock类的内部结构ReentrantReadWriteLock有五个内部类,五原创 2020-05-24 19:46:47 · 456 阅读 · 1 评论 -
深入图解AQS实现原理和源码分析
AQS底层实现原理用一句话可以总结就是:volatile + CAS + 一个虚拟的FIFO双向队列(CLH队列)。所以在了解AQS底层实现时,需要先深入了解一下CAS实现原理。#名词解释(1)CAS:无锁的策略使用一种叫做比较交换的技术(Compare And Swap)来鉴线程修改冲突,一旦检测到冲突产生,就重试当前操作直到没有冲突为止。(2)AQS:AbstractQuenedSynchronizer抽象的队列式同步器,主要提供了一些锁操作的模板方法。其中J.U.C都是基于AQS实现的。原创 2020-05-16 00:19:56 · 2384 阅读 · 2 评论