尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Java多线程八股文:核心知识点与高频面试题解析
1. 线程与进程的基本概念进程是操作系统进行资源分配和调度的基本单位拥有独立的地址空间线程是进程内的执行单元共享进程的堆和方法区但每个线程拥有独立的虚拟机栈和程序计数器。Java 中创建线程主要有三种方式继承Thread类重写run()方法。实现Runnable接口实现run()方法。实现Callable接口配合FutureTask获取返回值。推荐使用Runnable或Callable因为 Java 是单继承实现接口更灵活且便于解耦任务与执行。2. 线程的生命周期与状态转换Java 线程共有六种状态NEW创建后尚未启动。RUNNABLE就绪或运行中等待 CPU 调度。BLOCKED等待获取监视器锁进入同步块/方法时阻塞。WAITING调用wait()、join()或LockSupport.park()后无限期等待。TIMED_WAITING调用sleep()、带超时的wait()或join()后有限期等待。TERMINATED执行完毕或异常退出。高频考点sleep()不释放锁wait()释放锁wait()必须在同步代码块中调用否则抛出IllegalMonitorStateException。3. 并发编程的三大特性原子性一个操作或多个操作要么全部执行且不被中断要么全部不执行。Java 通过synchronized、Lock、AtomicInteger等保证原子性。可见性一个线程修改共享变量后其他线程能立即看到修改。Java 通过volatile、synchronized、final和Lock保证可见性。有序性程序执行顺序按代码顺序进行。编译器和 CPU 可能重排序volatile通过内存屏障禁止指令重排synchronized通过锁保证临界区内的有序性。4. volatile 关键字详解volatile是轻量级同步机制保证可见性和有序性但不保证原子性。适用场景状态标志位如volatile boolean running true用于控制线程停止。双重检查锁单例模式中instance必须声明为volatile防止指令重排导致返回未初始化对象。典型面试题volatile能否保证原子性答案是不能。例如count是读-改-写三步操作volatile无法保证整体原子性需使用AtomicInteger或加锁。5. synchronized 关键字与锁升级synchronized是 JVM 内置的互斥锁可修饰实例方法、静态方法和代码块。锁的对象分别是当前实例、Class 对象和指定对象。JDK 1.6 引入锁升级机制锁状态从低到高为无锁无竞争状态。偏向锁只有一个线程访问记录线程 ID避免 CAS 开销。轻量级锁多个线程交替访问通过 CAS 自旋获取锁。重量级锁竞争激烈线程阻塞并唤醒涉及操作系统互斥量。锁只能升级不能降级目的是减少锁竞争带来的性能开销。6. Lock 接口与 ReentrantLockReentrantLock是Lock接口的主要实现与synchronized相比具备以下优势可中断通过lockInterruptibly()响应中断。可超时通过tryLock(timeout, unit)避免死锁。公平锁构造参数传入true时按 FIFO 顺序获取锁。多个条件变量通过newCondition()实现精准唤醒。使用Lock时必须在finally块中调用unlock()否则锁无法释放。7. 线程池的核心参数与执行流程线程池通过ThreadPoolExecutor创建核心参数包括corePoolSize核心线程数常驻线程。maximumPoolSize最大线程数。keepAliveTime非核心线程空闲存活时间。workQueue任务阻塞队列。threadFactory线程工厂用于设置线程名和优先级。handler拒绝策略。执行流程提交任务后先判断核心线程是否已满未满则创建核心线程执行已满则放入阻塞队列队列满则创建非核心线程执行线程数达到最大值则执行拒绝策略。四种拒绝策略AbortPolicy直接抛出RejectedExecutionException。CallerRunsPolicy由提交任务的线程执行。DiscardPolicy直接丢弃任务。DiscardOldestPolicy丢弃队列中最旧的任务。生产环境推荐使用ThreadPoolExecutor手动创建避免Executors工具类带来的隐患如无界队列导致 OOM。8. 线程池的常见问题与调优高频面试题如何合理设置线程池大小CPU 密集型设置为 CPU 核数 1减少上下文切换。IO 密集型设置为 CPU 核数 × 2或使用公式CPU 核数 /1 - 阻塞系数阻塞系数通常取 0.8 到 0.9。如何监控线程池可以通过getPoolSize()、getActiveCount()、getQueue().size()等方法定期采集指标并结合日志和告警系统分析。9. 死锁的产生条件与排查方法死锁产生的四个必要条件互斥资源只能被一个线程占用。持有并等待线程持有资源的同时等待其他资源。不可剥夺资源不能被强制抢占。循环等待多个线程形成环形等待链。避免死锁的方法按固定顺序获取锁破坏循环等待。使用tryLock加超时避免无限等待。尽量缩小同步代码块范围减少锁持有时间。排查方法使用jstack导出线程快照搜索 deadlock 关键字定位死锁线程和锁对象。10. ThreadLocal 的原理与内存泄漏ThreadLocal为每个线程提供独立的变量副本实现线程隔离。每个线程内部持有ThreadLocalMap键为ThreadLocal的弱引用值为变量副本。内存泄漏原因ThreadLocalMap的键是弱引用但值是强引用。当ThreadLocal被回收后键变为null但值仍被线程持有无法被回收。解决方案使用完ThreadLocal后调用remove()方法清除在线程池场景中线程复用导致变量残留必须在任务结束后清理。11. CAS 与原子类CASCompare And Swap是乐观锁的核心实现包含三个操作数内存地址 V、期望值 A、新值 B。仅当 V 的值等于 A 时才将 V 更新为 B否则重试。CAS 的三大问题ABA 问题变量被修改后又恢复原值CAS 无法感知。可通过AtomicStampedReference加版本号解决。自旋开销竞争激烈时 CPU 空转可使用LongAdder分段累加降低竞争。只能保证一个变量的原子性多个变量需使用锁或AtomicReference封装。常用原子类AtomicInteger、AtomicLong、AtomicBoolean、AtomicReference底层通过Unsafe类的compareAndSwapInt实现。12. AQS 原理与 ReentrantLock 实现AQSAbstractQueuedSynchronizer是 JUC 锁和同步器的基石内部维护一个volatile int state和一个 FIFO 双向队列。核心原理获取锁时通过 CAS 将state从 0 改为 1成功则获得锁。获取失败时线程封装为 Node 加入同步队列尾部通过LockSupport.park()阻塞。释放锁时将state改回 0唤醒队列头部的后继节点。ReentrantLock的可重入性通过state累加实现同一线程重复获取锁时state加 1释放时减 1减到 0 才真正释放锁。13. CountDownLatch、CyclicBarrier 与 SemaphoreCountDownLatch计数器减到 0 时放行等待线程用于一个线程等待多个线程完成。计数器不可复用。CyclicBarrier多个线程互相等待全部到达屏障后同时放行可循环复用。支持可选的屏障动作。Semaphore信号量控制同时访问资源的线程数量可用于限流。通过acquire()获取许可release()释放许可。区别总结CountDownLatch是等待事件发生CyclicBarrier是线程间互相等待Semaphore是控制并发数量。14. 并发容器与集合高频考点ConcurrentHashMap的实现原理。JDK 1.7 使用分段锁将数据分为多个 Segment每个 Segment 独立加锁提高并发度。JDK 1.8 改为 CAS synchronized锁粒度细化到单个桶且引入红黑树优化链表过长时的查询性能。其他并发容器CopyOnWriteArrayList写时复制读操作无锁适合读多写少场景。BlockingQueue阻塞队列支持生产者-消费者模式常用实现有ArrayBlockingQueue、LinkedBlockingQueue。ConcurrentLinkedQueue基于 CAS 的无界非阻塞队列。15. 线程通信与协作经典生产者-消费者模型可通过以下方式实现synchronizedwait()/notifyAll()。LockCondition支持精准唤醒。BlockingQueue内部自动处理阻塞和唤醒。高频面试题两个线程交替打印 1 到 100。可使用synchronizedwait()/notify()或ReentrantLock 两个Condition实现。16. 常见多线程面试题汇总以下为高频面试题及简要思路线程和进程的区别进程是资源分配单位线程是 CPU 调度单位进程间相互独立线程共享进程资源。为什么使用线程池降低资源消耗、提高响应速度、便于统一管理。如何停止一个线程使用volatile标志位配合interrupt()不要使用已废弃的stop()。什么是上下文切换CPU 从当前线程切换到另一个线程时保存和恢复现场的开销。什么是活锁和饥饿活锁是线程不断重试但无法推进饥饿是低优先级线程长期得不到 CPU 时间。什么是伪共享多个变量位于同一缓存行一个变量修改导致其他变量缓存失效可通过Contended或填充字节解决。17. 总结与复习建议多线程是 Java 面试的高频考点建议按以下路径复习先掌握线程基础创建方式、生命周期、三大特性。再深入锁机制synchronized、volatile、Lock、AQS。最后掌握并发工具线程池、并发容器、原子类、同步器。面试中不仅要会背概念还要能结合代码示例说明原理并主动补充性能对比和适用场景体现深度思考。
RELATED

相关推荐

OpenHarmony上Flutter勋章模块实战:从数据模型到多机型适配

OpenHarmony上Flutter勋章模块实战:从数据模型到多机型适配

社团管理App在OpenHarmony设备上正式上线前,最让我头疼的不是登录、不是通讯录,而是这个看起来人畜无害的荣誉勋章模块。项目需求文档里只有一句话——"给表现积极的同学发个勋章"。我当时天真地以为这就是画个圆形图标、存个发放记录&#xf…

📅 2026/10/21 2:25:45
海康工业相机C++二次开发实战:从Demo到产线级上位机集成

海康工业相机C++二次开发实战:从Demo到产线级上位机集成

简介:这份资源是海康工业相机SDK的C版Demo源代码,面向机器视觉工程师与C开发者,帮助其快速理解并调用海康相机API,完成图像采集、参数配置与设备控制。Demo基于Qt构建简洁界面,可实时显示相机画面,并通过按…

📅 2026/10/21 2:25:44
DLMS/COSEM 蓝皮书解读(四十一):IEC 61334-4-32 LLC setup(class_id = 55)—— S-FSK 的 LLC 子层“参数本“

DLMS/COSEM 蓝皮书解读(四十一):IEC 61334-4-32 LLC setup(class_id = 55)—— S-FSK 的 LLC 子层“参数本“

DLMS/COSEM 蓝皮书解读(四十一):IEC 61334-4-32 LLC setup(class_id 55)—— S-FSK 的 LLC 子层"参数本":帧长上限 RDR 待读清单系列说明:本系列基于 DLMS UA《Blue Book&#xff0…

📅 2026/10/21 2:20:41
MORE NEWS

更多资讯

📰

NVFP4:让大模型从零预训练跑在4位浮点上

训练大模型最怕的从来不是模型推不动,而是显存和带宽在物理上先投降。我最近读了一篇硬核的预训练论文,标题是“Pretraining Large Language Models with NVFP4”,核心就一句话:让大语言模型从零预训练阶段,前向、反向…

📰

MX Linux 25.1双Init并存:SysVinit与systemd自由切换

一提到“你的发行版到底该用哪套init”,Linux社区的讨论经常就变成立场之争。systemd派觉得日志、依赖、资源控制统统内置才是现代系统该有的样子;传统派则认为一个脚本一个脚本顺序执行、每步都可预期的SysVinit才叫优雅。大多数发行版早就不纠结这个问…

📰

SheerID-Verification-Tool部署指南:从本地到生产环境的无缝迁移

SheerID-Verification-Tool部署指南:从本地到生产环境的无缝迁移 SheerID-Verification-Tool是一款轻量级工具,专为集成和测试SheerID验证工作流设计,能简化API请求、处理响应并支持学生等项目的资格检查。本指南将帮助你实现从本地开发到生…

📰

NVFP4预训练大模型:从量化训练到部署的全面解析

最近把这篇《Pretraining Large Language Models with NVFP4》翻来覆去读了几遍,越读越觉得它不只是“又一篇4位精度论文”,更像是给整个量化生态指了一个新方向。过去大家默认FP4只能做推理阶段的压缩,谁在预训练里碰4位精度,谁就…

📰

统一API架构下GPT-5.2与DeepSeek-V3.2模型选型与路由降级实战

最近在做模型网关项目时,我需要在同一个系统里同时接入GPT-5.2和DeepSeek-V3.2。如果你也正在搞Agent应用、企业内部知识库或者面向C端的智能助手,大概率会和我遇到同一类麻烦:模型各有各的强项,但应用层总不能为每一个模型单独写…

📰

AI驱动流程自动化实战:架构师视角的拆解与落地要点

这两年我听到最多的一个词就是“AI驱动流程自动化”,不少做架构的朋友都在琢磨怎么靠它往上走一档。作为AI应用架构师,很多人觉得我们干的就是接几个大模型接口、写点提示词,但真正深入做过端到端自动化的人才会明白,这套东西的难…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬