
JUC并发编程
文章平均质量分 91
多线程基础知识、锁、线程池、CompletableFuture、JMM、volatile、CAS、原子操作、LongAdder、ThreadLocal、Synchronized与锁升级、强大的三个工具类、线程中断、AQS源码分析等
所得皆惊喜
很高兴认识大家,我是蓝帽子先生,优快云博客专家,Java领域优质创作者,阿里云社区受邀专家博主,目前从事某药物公司,负责小程序、app 服务端开发,跟随前辈熟悉商城逻辑代码中。热爱开源、热爱学习、目前Spring源码和MYSQL系统学习中。2025年,期待一起学习、一起进步!
展开
-
Juc04_阻塞队列概述、方法、实现类、Linked和Array区别、注意事项
Juc04_阻塞队列概述、方法、实现类、Linked和Array区别、注意事项原创 2023-06-26 10:54:49 · 681 阅读 · 1 评论 -
Juc_并发编程目录
只有登上山顶,才能看到那边的风光时刻磨刀,学习提升,才能不被淘汰 更新中感谢周阳老师的付出,将大厂学院JUC全部公开,第一次接触周阳老师的课程那个时候在学校,记得那个时候接近毕业了,看的JVM,出去准备面试。接着陆陆续续看了老师的cloud、面试第一季、第二季等,收获很大,也让自己在这个知识点上有了更多的理解。谈谈看完老师JUC后需要注意的几个小问题:(1). 不需要预习,直接看视频劲量在课上就进行消化,建议自己也总结,加上自己的认知(2). 从CompletableFeture到JVM、到后面的原创 2020-10-21 21:14:41 · 76660 阅读 · 36 评论 -
Juc00_多线程基础小知识
1123原创 2020-10-21 22:34:43 · 20350 阅读 · 3 评论 -
Juc01_多线程概述、四种实现方式、常用方法API、生命周期、买票案例、synchronized锁
多线程概述、四种实现方式、常用方法API、生命周期、买票案例、synchronized锁原创 2020-10-21 22:37:19 · 12607 阅读 · 5 评论 -
Juc02_Synchronized、ReentrantLock实现生产者和消费者问题
4456原创 2020-10-21 22:38:41 · 5549 阅读 · 2 评论 -
Juc03_多线程中的虚假唤醒的产生、问题分析、解决方案
①. 什么是volatile1>. 什么是volatile?①. volatile是Java虚拟机提供的 轻量级的同步机制(乞丐版的synchronized)②. 特征:保证可见性不保证原子性禁止指令重排②. JMM的理解2>. JMM的理解(java内存模型)①. JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念 并不真实存在,它描述的是一组规则或规范通过规范定制了程序中各个变量(包括实例字段,静态字段和构成数原创 2020-10-21 22:39:11 · 3984 阅读 · 3 评论 -
Juc04_阻塞队列
①. CAS你知道吗?1>. CAS你知道吗CAS的全称为Compare-And-Swap ,它是一条CPU并发原语,比较工作内存值(预期值)和内存值是否相同,相同则执行规定操作,否则继续比较直到主内存和工作内存的值一致为止 /* * CAS:Compare and swap [比较并交换] * */ public class AtomicIntegerDemo { public static void main(String[] args) { Atomi原创 2020-10-21 22:40:28 · 3765 阅读 · 4 评论 -
Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略
Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略原创 2020-10-29 21:08:31 · 5302 阅读 · 5 评论 -
Juc06_Lock8锁问题、字节码层面看Synchronized、反编译synchronized锁
Lock8锁问题、字节码层面看Synchronized、反编译synchronized锁原创 2020-10-31 09:18:40 · 4200 阅读 · 0 评论 -
Juc07_乐观锁和悲观锁、公平锁和非公平锁、递归锁(可重入锁)、死锁及排查、自旋锁
在这里插入代码片原创 2020-10-31 09:19:11 · 4954 阅读 · 7 评论 -
Juc08_ForkJoin
在这里插入代码片原创 2020-10-31 09:20:30 · 3476 阅读 · 14 评论 -
Juc09_CompletableFuture概述、创建方式、常用API、电商比价需求
CompletableFuture概述、创建方式、常用API、电商比价需求原创 2021-03-12 12:11:31 · 7402 阅读 · 1 评论 -
Juc10_CPU指令、缓存结构、运行安全等级、操作系统内存管理、上下文切换、虚拟机指令集架构
文章目录①. 冯诺依曼计算机模型详解②. CPU指令结构③. CPU缓存结构④. CPU运行安全等级⑤. 操作系统内存管理⑥. 上下文切换⑦. 虚拟机指令集架构①. 冯诺依曼计算机模型详解①. 现代计算机模型是基于-冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令程序与数据一样存原创 2021-06-05 16:44:02 · 2619 阅读 · 1 评论 -
Juc11_Java内存模型之JMM、八大原子操作、三大特性、读写过程、happens-before
文章目录①. Java内存模型Java Memory Model②. 数据同步八大原子操作③. JVMM规范下,三大特性①. 可见性②. 原子性③. 有序性④. JVMM规范下,多线程对变量的读写过程⑤. JVMM规范下,多线程先行发生原则之happens-before①. 先行发生原则说明②. happens-before总原则③. happens-before之8条④. 案例说明①. Java内存模型Java Memory Model①. JMM(Java内存模型Java Memory Mode原创 2021-06-05 16:46:27 · 5122 阅读 · 11 评论 -
Juc12_Volatile的可见性、不保证可见性、有序性、使用、内存屏障四大指令StoreStore、StoreLoad 、LoadLoad、LoadStore
Juc12_Volatile的可见性、不保证可见性、有序性、使用、内存屏障四大指令StoreStore、StoreLoad 、LoadLoad、LoadStore原创 2021-06-05 18:53:31 · 7062 阅读 · 6 评论 -
Juc13_JVM-JMM-CPU底层执行全过程、缓存一致性协议MESI
下面的(1)(2)是我自己的理解,可能有误差,期待一个大佬指点下简单来说是volatile激发了MESI(1). volatile保证可见性,在汇编会有一个lock锁前缀,触发缓存一致性协议,保证了可见性(2). volatile保证有序性,是基于它底层的内存屏障,loadload、StoreLoad、LoadStore、StoreStore文章目录①. JVM-JMM-CPU底层执行全过程②. 缓存一致性协议①. JVM-JMM-CPU底层执行全过程①. JVM(内存中)是基于栈的指令集架原创 2021-06-08 18:21:46 · 2481 阅读 · 3 评论 -
Juc14_CAS的概述、Unsafe类的原理、CAS缺点、ABA问题如何解决
文章目录①. CAS是什么?②. UnSafe类③. CAS的缺点④. ABA问题解决方案CAS底层原理? UnSafe类+CAS思想[自旋锁]①. CAS是什么?①. CAS的全称为Compare-And-Swap ,它是一条CPU并发原语,比较工作内存值(预期值)和主物理内存的共享值是否相同,相同则执行规定操作,否则继续比较直到主内存和工作内存的值一致为止。这个过程是原子的(AtomicInteger类主要利用CAS(compare and swap)+volatile和native方法来保原创 2021-06-08 18:22:35 · 4954 阅读 · 7 评论 -
Juc15_基本AtomicInteger、数组、引用AtomicStampedReference、对象的属性修改原子类AtomicIntegerFieldUp 、原子操作增强类LongAdder
文章目录①. atomic是什么?②. 基本类型原子类(AtomicInteger、AtomicBoolean、AtomicLong)③. 数组类型原子类 (AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray)④. 引用类型原子类 (AtomicReference、AtomicStampedReference、AtomicMarkableReference)⑤. 对象的属性修改原子类 (AtomicIntegerFieldUp dater、Atom原创 2021-06-15 17:49:07 · 2861 阅读 · 6 评论 -
Juc16_LongAdder引入、原理、Striped64、分散热点思想、深度解析LongAdder源码、LongAdder和AtomicLong区别
文章目录①. LongAdder的引入、原理、能否代替AtomicLong②. Striped64③. LongAdder为什么这么快呢?(分散热点)④. 源码解析 longAdder.increment( )①. add(1L)②. longAccumulate(x, null, uncontended)③. Striped64.java④. LongAdder.java⑤. sum( )⑥. 关于AtomicLong和LongAdder区别①. LongAdder的引入、原理、能否代替AtomicLo原创 2021-06-15 17:59:41 · 2700 阅读 · 13 评论 -
Juc17_ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法
JVM四大引用 - 强软弱虚引用文章目录①. ThreadLocal简介①. ThreadLocal是什么②. api介绍③. 永远的helloword④. 通过上面代码总结②. 从阿里ThreadLocal规范开始①. 非线程安全的SimpleDateFormat②. 将SimpleDateFormat定义成局部变量(方案一)③. ThreadLocal 解决日期格式乱码问题④. 阿里规范怎么说的?③. ThreadLocal源码分析①. Thread|ThreadLocal|ThreadLocalMa原创 2021-06-17 19:30:19 · 4021 阅读 · 0 评论 -
Juc18_Java内存模型、对象头Mark Word、实例数据、对齐填充、谈谈new Object( )占多大内存
文章目录①. 对象在堆内存中的存储布局②. 对象头(Header)①. 对象标记Mark Word②. 类元信息(又叫类型指针)③. 对象头多大③. 实例数据④. 对齐填充⑤. 总结⑥. 再说对象头的MarkWord⑦. 聊聊Object obj = new Object()①. 对象在堆内存中的存储布局①. 对象内部结构分为:对象头、实例数据、对齐填充(保证8个字节的倍数)。②. 对象头分为对象标记(markOop)和类元信息(klassOop),类元信息存储的是指向该对象类元数据(kla原创 2021-06-23 09:09:36 · 3399 阅读 · 1 评论 -
Juc19_从字节码角度看synchronize、Monitor类、monitorenter、monitorexit、深入理解同步方法
从字节码角度看synchronize、Monitor类、monitorenter、monitorexit、深入理解同步方法原创 2021-06-27 11:03:36 · 6271 阅读 · 1 评论 -
Juc20_Synchronized锁升级、无锁、偏向锁、轻量级锁、重量级锁、锁消除、锁粗化
文章目录①. Synchronized的性能变化②. 无锁③. 偏向锁 单个线程多次访问①. Synchronized的性能变化①. java5以前,只有Synchronized,这个是操作系统级别的重量级操作,重量级锁,假如锁的竞争比较激烈的话,性能下降②. 在Java早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,挂起线程和恢复线程都需要转入内核态去完成,阻塞或唤醒一个Java线程需要操作系统切原创 2021-06-27 11:17:11 · 4438 阅读 · 2 评论 -
Juc21_强大的三个工具类、CountDownLatch 闭锁 、CyclicBarrier 、Semaphore
文章目录①. CountDownLatch(闭锁) 做减法②. CyclicBarrier做加法③. Semaphore 信号量为什么这里要介绍下JUC强大的工具类?CountDownLatch | CyclicBarrier | Semaphore 底层都是AQS来实现的①. CountDownLatch(闭锁) 做减法①. CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞②. 其它线程调用countDown方法会将计数器减1(调用co原创 2021-07-01 23:35:18 · 2671 阅读 · 1 评论 -
Juc22_什么是中断、interrupt、isInterrupted、interrupted方法源码解析、如何使用中断标识停止线程
文章目录①. 什么是中断②. 源码解读(中断的相关API)③. 如何使用中断标识停止线程①. 什么是中断①. 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,所以,Thread.stop、Thread.suspend、Thread. resume都已经被废弃了②. 在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的机制 — 中断③. 中断只是一种协作机制,Java没有给中断增加任何语法,中断的原创 2021-07-02 08:51:41 · 2481 阅读 · 4 评论 -
Juc23_LockSupport概述、阻塞方法park、唤醒方法unpark(thread)、解决的痛点、带来的面试题
文章目录①. 什么是LockSupport?②. 阻塞方法③. 唤醒方法(注意这个permit最多只能为1)④. LockSupport它的解决的痛点⑤. LockSupport 面试题目①. 什么是LockSupport?①. 通过park()和unpark(thread)方法来实现阻塞和唤醒线程的操作②. LockSupport是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,阻塞之后也有对应的唤醒方法。归根结底,LockSupport调用的Unsafe中的nati原创 2021-07-02 09:05:30 · 2891 阅读 · 1 评论 -
Juc24_AQS的概述、体系架构、深入源码解读(非公平)、源码总结
文章目录①. AQS是什么?②. AQS内部体系架构③. ReentrantLock开始解读AQS①. 代码展示②. 从最简单的lock方法开始看看公平和非公平③. lock()④. tryAcquire(arg)⑤. addWaiter(Node.EXCLUSIVE)⑥. acquireQueued(addWaiter(Node.EXCLUSIVE), arg) ⑦. unlock( )获取permit⑧. AQS源码总结①. AQS是什么?①. 是用来构建锁或者其它同步器组件的重量级基础框架及整个原创 2021-07-06 12:30:41 · 10110 阅读 · 7 评论