首先,在讲解所有内容之前,本人先来带同学们回顾下 线程 和 锁 的知识:
进程和线程:
请观看本人博文 —— 《【JUC剖析】 线程 与 进程 重温》
讲到 并发,就不得不来讲讲锁
因为 锁 是解决并发的主要手段:
锁:
请观看本人博文 —— 《【JUC剖析】锁 彻底解析》
在单线程的情况下,集合类只需要考虑效率问题
但是,在并发情况下,我们就不得不考虑 线程安全问题 了
因为,一般的 集合类 不安全:
集合类 不安全:
请观看本人博文 —— 《【JUC剖析】并发 与 集合》
在JUC包中,有三个类十分重要,它们被称为 三大辅助类:
三大 辅助类:
请观看本人博文 —— 《【JUC剖析】三大辅助类 详解》
在有些特定的情况下,我们不得不将当前线程阻塞
例如:
- 存储信息的 队列满了,写线程 就必须要阻塞
- 存储信息的 队列为空,读线程 就必须要 阻塞
这就需要使用到 阻塞队列 来解决上述的需求:
阻塞队列 —— BlockingQueue 接口:
请观看本人博文 —— 《【JUC剖析】阻塞队列 详解》
在本人之前的博文《详解 线程池》中曾讲到了 通过 Executors类 来创建线程池
那么,接下来,本人就来剖析下 Executors类 是如何 创建线程池的:
线程池:
请观看本人博文 —— 《【JUC剖析】 线程池 深度剖析》
在上文的学习中,见到过很多函数型接口:
函数式接口:
请观看本人博文 —— 《【JUC剖析】 函数式接口 详解》
Stream流式计算:
请观看本人博文 —— 《详解 stream流式计算》
拆分与聚合 —— ForkJoin 框架:
请观看本人博文 —— 《【JUC剖析】 ForkJoin 探析》
在我们学习SpringBoot 以及 Ajax 的时候,都了解过一个十分强悍的机制 —— 异步回调
在JUC包下,也提供了封装异步回调功能的类:
异步回调 —— CompletableFuture类:
请观看本人博文 —— 《【JUC剖析】异步回调 与 CompletableFuture类 探析》
讲到并发问题,相信同学们记得的不止 synchronized这一个关键字
还有一个关键字非常重要 —— volatile关键字:
JMM 与 volatile关键字:
请观看本人博文 —— 《【JUC剖析】 JMM 与 volatile关键字 详解》
说到volatile关键字,就不得不再来谈一下 单例模式:
单例模式:
请观看本人博文 —— 《【JUC剖析】多线程 与 单例模式》
在上文中,我们能够看到:即使使用了 volatile关键字 ,还是因为没有原子性,出现了线程安全问题
为了 保证原子性,除了 使用 synchronized 与 Lock 外,还有什么方法呢?
答曰:Atomic类
CAS 与 Atomic类:
请观看本人博文 —— 《【JUC剖析】 CAS 与 Atomic类 详解》
那么,到此,JUC的全部内容就讲解完毕了!
框架的学习十分轻松,也因此很容易掌握
但是真正能让我们理解框架的每一个功能的基本实现步骤,还是得了解底层
希望本专栏能够让同学们有丰富的收获!
最后,祝大家学业有成,面向大厂和前沿技术编程!