Skip to content

补充了关于并发编程的知识#2794

Merged
Snailclimb merged 3 commits intoSnailclimb:mainfrom
REALROOK1E:main
Mar 8, 2026
Merged

补充了关于并发编程的知识#2794
Snailclimb merged 3 commits intoSnailclimb:mainfrom
REALROOK1E:main

Conversation

@REALROOK1E
Copy link
Contributor

添加了一些在我秋招春招面试过程中,遇到的一些被问住的问题,以及在其他地方看到的,可以和面试官展示深度的问题,比如非常常见(尤其是字节)会问的AQS相关的东西。
以下是新增的列表:

  1. 线程池的五种生命周期状态(RUNNING 到 TERMINATED)是怎么流转的、底层 ctl 变量怎么用位运算同时存状态和线程数;
  2. Worker 内部类为什么要继承 AQS 搞个不可重入锁、runWorker() 和 getTask() 的执行流程;
  3. 还有四种拒绝策略各自适合什么场景,顺带提了 Dubbo、Netty 这些框架是怎么自定义拒绝策略的,这里可以展示一波技术广度。

AQS章节里

  1. volatile 内存屏障的细节——四种屏障类型分别干什么、JMM 在 volatile 读写前后怎么插屏障、DCL 单例里 volatile 到底防了什么重排序,还有 volatile 和 synchronized 的性能对比该怎么选。
  2. 独占模式和共享模式的对比(tryAcquire 返回 boolean 而 tryAcquireShared 返回 int,这个区别很多人搞不清)
  3. Condition 条件队列的 await/signal 怎么在条件队列和同步队列之间转移节点
  4. 公平锁为什么比非公平锁慢(多了 hasQueuedPredecessors 检查,线程切换开销大)。

ThreadLocal章节:
原文已经讲了 key 是弱引用、value 是强引用的基本机制,但没解释为什么要用弱引用——这次把完整的引用链路画出来了,对比了如果 key 用强引用会怎样,弱引用本质上是个兜底机制但也不完全可靠。

然后专门讲了线程池场景下的风险放大效应,引了美团技术团队那个用户数据串号的真实事故。最后把阿里巴巴 Java 开发手册里那条【强制】规则原文贴上来了,给了 static final + try-finally + remove() 的标准写法,解释了为什么要用完就清而不是下次用之前再 set。

备注:为了语言的严谨性,使用大模型进行了润色,然后进行人工修改增强可读性,如有错误请指正!

- java-concurrent-questions-02.md: 新增volatile内存屏障类型、读写屏障插入策略、DCL内存屏障分析、volatile与happens-before关系、volatile与synchronized性能对比
- aqs.md: 新增独占模式与共享模式深入对比、Condition条件队列工作机制及源码分析、公平锁与非公平锁性能差异分析
@Snailclimb
Copy link
Owner

添加了一些在我秋招春招面试过程中,遇到的一些被问住的问题,以及在其他地方看到的,可以和面试官展示深度的问题,比如非常常见(尤其是字节)会问的AQS相关的东西。 以下是新增的列表:

  1. 线程池的五种生命周期状态(RUNNING 到 TERMINATED)是怎么流转的、底层 ctl 变量怎么用位运算同时存状态和线程数;
  2. Worker 内部类为什么要继承 AQS 搞个不可重入锁、runWorker() 和 getTask() 的执行流程;
  3. 还有四种拒绝策略各自适合什么场景,顺带提了 Dubbo、Netty 这些框架是怎么自定义拒绝策略的,这里可以展示一波技术广度。

AQS章节里

  1. volatile 内存屏障的细节——四种屏障类型分别干什么、JMM 在 volatile 读写前后怎么插屏障、DCL 单例里 volatile 到底防了什么重排序,还有 volatile 和 synchronized 的性能对比该怎么选。
  2. 独占模式和共享模式的对比(tryAcquire 返回 boolean 而 tryAcquireShared 返回 int,这个区别很多人搞不清)
  3. Condition 条件队列的 await/signal 怎么在条件队列和同步队列之间转移节点
  4. 公平锁为什么比非公平锁慢(多了 hasQueuedPredecessors 检查,线程切换开销大)。

ThreadLocal章节: 原文已经讲了 key 是弱引用、value 是强引用的基本机制,但没解释为什么要用弱引用——这次把完整的引用链路画出来了,对比了如果 key 用强引用会怎样,弱引用本质上是个兜底机制但也不完全可靠。

然后专门讲了线程池场景下的风险放大效应,引了美团技术团队那个用户数据串号的真实事故。最后把阿里巴巴 Java 开发手册里那条【强制】规则原文贴上来了,给了 static final + try-finally + remove() 的标准写法,解释了为什么要用完就清而不是下次用之前再 set。

备注:为了语言的严谨性,使用大模型进行了润色,然后进行人工修改增强可读性,如有错误请指正!

感谢完善,很实用的补充👍欢迎加我的微信领取一个小红包:javaguide1024

@Snailclimb Snailclimb merged commit 763ea09 into Snailclimb:main Mar 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants