写点什么

直击灵魂!美团大牛手撸并发原理笔记,由浅入深剖析 JDK 源码

  • 2023-05-24
    湖南
  • 本文字数:1097 字

    阅读完需:约 4 分钟

并发编程这四个字想必大家最近都在网上看到过有很多的帖子在讨论。我们都知道并发编程可选择的方式有多进程、多线程和多协程。在 Java 中,并发就是多线程模式。而多线程编程也一直是一个被广泛而深入讨论的领域。如果遇到复杂的多线程编程场景,大多数情况下我们就需要站在巨人的肩膀上利用并发编程框架——JDK Concurrent 包来解决相关线程问题。

Concurrent 包很复杂吗?

相信很多人对于 Concurrent 并发包都是一知半解,更别说 Concurrent 包源码了。(大牛另当别论)可以说要是 Concurrent 包与其源码有一定的了解的话是完全可以避免重复造轮子,也能避免因为使用不当而掉到“坑”里,更不会说停留于一个“似是而非”的阶段。那么问题来了,如何学?不要慌,互联网雷锋(小编我)前段时间从一位美团的老哥手上弄到一份:Java 并发 JDK 源码剖析宝典,看完之后有感而发,特来分享给大家!


限于文章篇幅原因,只能以截图的形式展示出来,有需要的小伙伴 点击这里凭本文截图即可获取!

多线程基础

线程的优雅关闭

  1. stop ( )与 destory ()函数

  2. 守护线程

  3. 设置关闭的标志位

synchronized 关键字

  1. 锁的对象是什么

  2. 锁的本质是什么

  3. synchronized 实现原理


wait()与 notify()

  1. 生产者-消费者模型

  2. 为什么必须和 synchronized 一起使用

  3. 为什么 wait ()的时候必须释放锁

  4. wait () 与 notify ()的问题

volatile 关键字

  1. 64 位写入的原子性(Half Write)

  2. 内存可见性

  3. 重排序:DCL 问题


综合应用:无锁编程

  1. 一写一读的无锁队列:内存屏障

  2. 一写多读的无锁队列:volatile 关键字

  3. 多写多读的无锁队列:CAS

  4. 无锁栈

  5. 无锁链表

Atomic 类



Lock 与 Condition

互斥锁


读写锁


Condition


StampedLock


同步工具类



并发容器

BlockingQueue

  1. ArrayBlockingQueue

  2. LinkedBlockingQueue

  3. PriorityBlockingQuueue

  4. DelayQueue

  5. SynchronousQueue

BlockingDeque

CopyOnWrite

  1. CopyOnWriteArrayList

  2. CopyOnWriteArraySet


CncrertinkedQueue/Deque

CorcurrentHashMap

  1. JDK 7 中的实现方式

  2. JDK 8 中的实现方式

CnucrenskiplistMap/Set

  1. ConcurrentSkipListMap

  2. ConcurrentSkipListSet

线程池与 Future

线程池的实现原理

线程池的类继承体系

ThreadPoolExector

  1. 核心数据结构

  2. 核心配置参数解释

  3. 线程池的优雅关闭

  4. 任务的提交过程分析

  5. 任务的执行过程分析

  6. 线程池的 4 种拒绝策略

Callable 与 Future

ScheduledThreadPoolExecutor

Executors 工具类

ForkJoinPool

ForkJoinPool 用法

工作窃取队列

工作窃取算法:任务的执行过程分析

  1. 顺序锁 eqLock

  2. scanGuard 解析

CompletableFuture

CompletableFuture 内部原理

  1. CompletableFuture 的构造:ForkJoinPool

  2. 任务类型的适配

  3. 任务的链式执行过程分析

  4. thenApply 与 thenApplyAsync 的区别



任务的网状执行:有向无环图

限于文章篇幅原因,就展示到这里了,有需要的小伙伴 点击这里凭本文截图即可获取!

用户头像

还未添加个人签名 2021-07-28 加入

公众号:该用户快成仙了

评论

发布
暂无评论
直击灵魂!美团大牛手撸并发原理笔记,由浅入深剖析JDK源码_Java_做梦都在改BUG_InfoQ写作社区