Java并发编程(二十一)独占锁 ReentrantLock 的原理

此文为读书笔记,欢迎评论,讨论问题,共同进步!简介ReentrantLock 是可重入的独占锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞而被放入该锁的 AQS 阻塞队列里面。类图:从类图可以看到,ReentrantLock 是使用 AOS 来实现的,并且根据参数来决定其内部是一个公
ReentrantLock 2021年06月10日 59次浏览

Java并发编程(二十)抽象同步队列 AQS

此文为读书笔记,欢迎评论,讨论问题,共同进步!锁的底层支持AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用 AQS实现的。另外,大多数开发者可能永远不会直接使用 AQS,但是知道其原理对于架构设计还是很有帮助的。下面看下A
AQS 2021年06月05日 58次浏览

Java并发编程(十九)Java 并发包中锁原理剖析 LockSupport 工具类

此文为读书笔记,欢迎评论,讨论问题,共同进步!LockSupport 工具类JDK 中的rt.jar包里面的LockSupport是个工具类,它的主要作用是挂起和唤醒线程,该工具类是创建锁和其他同步类的基础。LockSupport类与每个使用它的线程都会关联一个许可证,在默认情况下调用 LockSu
并发 2021年02月21日 76次浏览

Java并发编程(十八)Java 并发包中并发List源码剖析

此文为读书笔记,欢迎评论,讨论问题,共同进步!介绍并发包中的并发List只有CopyOnWriteArrayList。CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。类图结构如图:在
并发 2021年02月21日 72次浏览

Java并发编程(十七)Java并发包中原子操作类原理

此文为读书笔记,欢迎评论,谈论问题,共同进步!JUC包提供了一系列的原子性操作类,这些类都是使用非阻塞算法CAS 实现的,相比使用锁实现原子性操作这在性能上有很大提高。原子性操作类的原理大致相同,下面描述下AtomicLong类的实现原理以及JDK8中新增的LongAdder和 LongAccumu
并发 2021年02月21日 105次浏览

Java并发编程(十六)ThreadLocalRandom

此文为读书笔记,欢迎评论,谈论问题,共同进步!ThreadLocalRandom类是 JDK 7在JUC包下新增的随机数生成器,它弥补了Random类在多线程下的缺陷。Random 类在JDK 7之前以及现在,java.util.Random 都是使用比较广泛的随机数生成工具类,而且java.lan
并发 2021年02月21日 77次浏览

Java并发编程(十五)锁

此文为读书笔记,欢迎评论,谈论问题,共同进步!乐观锁与悲观锁乐观锁和悲观锁是在数据库中引入的名词,但是在并发包锁里面也引入了类似的思想。悲观锁悲观锁:指对数据被外界修改持悲观态度,认为数据很容易就会被其他线程修改,所以在数据被处理前先对数据进行加锁,并在整个数据处理过程中,使数据处于锁定状态。悲观锁
并发 2021年02月21日 64次浏览

Java并发编程(十四)伪共享

此文为读书笔记,欢迎评论,谈论问题,共同进步!什么是伪共享为了解决计算机系统中主内存与CPU 之间运行速度差问题,会在CPU与主内存之间添加一级或者多级高速缓冲存储器(Cache)。这个Cache一般是被集成到 CPU 内部的,所以也叫 CPU Cache。两级 Cache 结构图:在Cache 内
并发 2021年02月21日 93次浏览

Java并发编程(十三)Java 中的原子性操作

此文为读书笔记,欢迎评论,谈论问题,共同进步!原子性操作,是指执行一系列操作时,这些操作要么全部执行,要么全部不执行,不存在只执行其中一部分的情况。在设计计数器时一般都先读取当前值,然后+1,再更新。这个过程是读—改一写的过程,如果不能保证这个过程是原子性的,那么就会出现线程安全问题。Java 中的
并发 2021年02月21日 89次浏览

Java并发编程(十二)Java 中共享变量的内存可见性问题

此文为读书笔记,欢迎评论,谈论问题,共同进步!Java 的内存模型先看下多线程下处理共享变 Java 的内存模型:Java内存模型规定,将所有的变量都存放在主内存中,当线程使用变量时,会把主内存里面的变量复制到自己的工作空间(工作内存),线程读写变量时操作的是自己工作内存中的变量。Java内存模型是
并发 2021年02月21日 96次浏览