Java并发常见面试题总结(上)
高频起点题
进程与线程:进程是资源分配单位,线程是调度单位。Java 线程由 JVM 映射到 OS 线程(平台线程),虚拟线程则是轻量用户态调度。
创建方式:继承 Thread、实现 Runnable、Callable+FutureTask,或线程池。推荐后两种,便于复用与治理。
sleep vs wait:sleep 不释放锁,属于 Thread;wait 释放 monitor,必须在同步块内调用,属于 Object。
自测回答框架
描述 synchronized 锁升级(偏向→轻量→重量)时,先说明对象头 Mark Word,再讲竞争触发膨胀,避免背诵术语而无场景。
原创追问
「为什么 double-checked locking 需要 volatile?」——半初始化对象对其他线程可见会导致 NPE,这题把 JMM 与单例模式绑在一起,是区分背诵与理解的分水岭。
课堂外的思考
学习「Java并发常见面试题总结(上)」时,我把自己放在线上值班的情境里:如果告警与这一主题相关,我能否在较短时间内建立假设并用数据验证?这种提问方式逼迫我从「看过」变成「讲得清楚、做得到」,也避免笔记沦为标题摘抄。
与同事的讨论方式
我会用白板画出状态机、内存布局或调用链,请同事挑错。若被追问「更高并发或更老 JDK 版本会怎样」,答不上来就回到文首原文链接查 primary source,而不是凭记忆硬编。讨论后把新认识补进笔记末尾。
可复现实验
为每个主题保留最小复现:一段可运行的 Java 片段、一条 jcmd/jstack 命令,或一组压测对比。记录环境(JDK 小版本、CPU 核数、容器限制),结论才可靠。实验细节不必全部公开,但索引要能找到。
补充复习
把本篇三个关键词写入间隔重复卡片,并各关联一个真实项目场景;暂时用不到的概念标记「待实践」,避免笔记只增不用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dai Wei!
评论

