Java并发大厂面试全攻略:30+高频必考题及详细解析
文章简介
专为即将面试大厂(腾讯、阿里、美团、百度等)Java开发工程师的人士准备,本文系统梳理并详细解答了30+道Java并发高频面试题,覆盖基础到进阶的核心知识点,助你高效备战技术面试。
1. 线程与进程的区别
考察知识点:线程和进程的基本概念
线程是操作系统能够进行运算调度的最小单位,属于进程。进程是资源分配的最小单位。一个进程可以包含多个线程,线程间共享进程资源,进程间资源隔离。
2. 创建线程的方式有哪些?
考察知识点:Java线程创建方式
有三种主要方式:继承Thread类、实现Runnable接口、实现Callable接口配合Future。推荐使用Runnable,或通过线程池(ExecutorService)管理线程。
3. Runnable和Callable的区别?
考察知识点:任务定义接口
Runnable无返回值且不能抛出检查型异常,Callable有返回值且可抛出异常。
4. 线程的生命周期有哪些状态?
考察知识点:线程状态及转换
包括新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)、终止(Terminated)。
5. 守护线程和用户线程的区别?
考察知识点:线程类型
守护线程为后台服务线程,如垃圾回收线程。所有用户线程结束后,JVM会退出,守护线程随之结束。
6. synchronized关键字原理
考察知识点:内置锁与同步机制
synchronized可修饰方法或代码块,保证同一时间只有一个线程访问临界区。底层通过对象的监视器锁(Monitor)实现。
7. synchronized用在静态方法和实例方法的区别?
考察知识点:类锁和对象锁
修饰实例方法锁定this对象,修饰静态方法锁定Class对象。
8. 可重入锁(ReentrantLock)原理
考察知识点:显示锁机制
ReentrantLock是JUC包中的可重入锁,支持公平锁/非公平锁选择,具备中断、超时、条件队列等高级特性。
9. synchronized和ReentrantLock的区别?
考察知识点:两种锁机制对比
synchronized为JVM内置,自动加解锁;ReentrantLock需手动操作,功能更丰富(如可中断、可定时、可公平),适合复杂场景。
10. volatile关键字的作用
考察知识点:内存可见性
volatile保证变量对所有线程可见,禁止重排序。适合状态标志等场景,但不保证原子性。
11. 原子性、可见性、有序性
考察知识点:并发三大特性
原子性:操作不可中断;可见性:线程间变量变化对其他线程可见;有序性:指令执行顺序符合预期。
12. 线程安全的概念
考察知识点:多线程并发安全
线程安全是指多个线程同时访问共享资源时,程序仍能正确执行。
13. 死锁的产生条件及避免方式
考察知识点:死锁四要素和预防
互斥、占有且等待、不可剥夺、循环等待。可通过破坏条件(如资源顺序分配、超时锁等)避免。
14. 活锁、饥饿的区别与场景
考察知识点:并发异常情况
活锁:线程不断重试但无法推进。饥饿:线程长期得不到资源。需合理调度和分配资源。
15. ThreadLocal原理及应用
考察知识点:线程本地变量
ThreadLocal为每个线程提供独立变量副本,常用于数据库连接、用户会话等场景。
16. 线程池的原理和优势
考察知识点:线程复用与资源管理
线程池通过复用线程降低开销,实现任务队列和线程复用。核心类:ThreadPoolExecutor。
17. 线程池的几种常用类型?
考察知识点:Executor框架
如FixedThreadPool、CachedThreadPool、SingleThreadExecutor、ScheduledThreadPool等。
18. ThreadPoolExecutor的核心参数
考察知识点:线程池参数含义
包括corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、handler等。
19. 线程池拒绝策略
考察知识点:任务溢出处理
如AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy。
20. Future和CompletionService区别
考察知识点:异步任务结果获取
Future获取单个任务结果,CompletionService支持多个并发任务结果按完成顺序获取。
21. CountDownLatch和CyclicBarrier区别
考察知识点:并发同步工具
CountDownLatch用于一组线程等待其他线程完成,CyclicBarrier用于一组线程相互等待,达到屏障后一起执行。
22. Semaphore作用
考察知识点:信号量控制并发数
Semaphore用来控制同时访问特定资源的线程数量,常用于限流。
23. ReadWriteLock原理
考察知识点:读写分离锁
ReadWriteLock允许多个读线程并发读,写线程互斥,提升读多写少场景下的性能。
24. CAS原理及ABA问题
考察知识点:无锁并发与原子操作
CAS(Compare And Swap)通过比较并交换实现原子操作,ABA问题可通过版本号(如AtomicStampedReference)解决。
25. 原子类(AtomicInteger等)原理
考察知识点:JUC包原子性保证
通过CAS实现原子性更新,常见如AtomicInteger、AtomicLong、AtomicReference等。
26. CopyOnWriteArrayList原理与应用
考察知识点:写时复制容器
适合读多写少场景,写操作时复制一份新数组,保证并发安全。
27. ConcurrentHashMap实现原理
考察知识点:并发Map结构
JDK7分段锁Segment,JDK8采用CAS+Synchronized+红黑树,提升并发性能。
28. BlockingQueue的常见实现及应用
考察知识点:生产者-消费者模型
如ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等,常用于任务队列。
29. Fork/Join框架原理
考察知识点:分治并行计算
适合大任务拆分为小任务并行执行,使用Work Stealing算法动态负载均衡。
30. 并发编程中的内存模型(JMM)
考察知识点:线程间通信与内存可见性
JMM定义主内存、工作内存和同步规则,保证多线程之间变量的可见性和有序性。
31. happens-before原则
考察知识点:JMM中的可见性和有序性保障
如锁的释放和获取、线程启动和终止、volatile写操作等都建立happens-before关系。
32. AQS(AbstractQueuedSynchronizer)原理
考察知识点:同步器设计
AQS是JUC包中同步器的基础,采用队列同步器设计,支持独占和共享锁,ReentrantLock、CountDownLatch等底层都基于AQS。
以上32个问题涵盖了Java并发编程大厂面试的高频基础知识点,每个问题均有详细解答,帮助你系统梳理并发编程面试必备技能。