多线程常见面试题清单
答案解析:xxx
一、基础概念类
- 线程和进程的区别?
- 创建线程的方式有哪些?
- 继承
Thread类 - 实现
Runnable接口 - 实现
Callable接口 +Future - 线程池
ExecutorService
- 继承
- 线程的生命周期和状态有哪些?
Runnable和Callable的区别?start()和run()方法的区别?- 守护线程(Daemon Thread)是什么?
- 线程上下文切换(Context Switch)是什么?
- 线程调度策略有哪些?Java 能控制吗?
- 什么是线程优先级?优先级高一定先执行吗?
- 线程的中断机制是怎么实现的?
二、线程安全与同步
- 什么是线程安全?
synchronized关键字的作用和原理?synchronized修饰方法和代码块的区别?synchronized和ReentrantLock的区别?volatile关键字的作用和原理?volatile能保证原子性吗?- 什么是原子类(AtomicInteger 等),它的原理是什么?
- 什么是 CAS(Compare-And-Swap)机制?
- 什么是死锁?如何避免死锁?
- 什么是活锁、饥饿?
三、并发工具类(JUC 包)
CountDownLatch的作用和使用场景?CyclicBarrier的作用和使用场景?Semaphore的作用和使用场景?Exchanger的作用和使用场景?Future和FutureTask的区别?CompletableFuture的特点和使用?BlockingQueue有哪些实现类?适用场景?ConcurrentHashMap的原理?1.7 和 1.8 有什么区别?CopyOnWriteArrayList的原理和适用场景?ThreadLocal的原理和内存泄漏问题?
四、线程池相关
- 线程池的好处是什么?
- Java 提供了哪些线程池类型?
ThreadPoolExecutor的核心参数有哪些?- 线程池的工作原理?
- 线程池的拒绝策略有哪些?
Executors.newFixedThreadPool()和newCachedThreadPool()的区别?- 如何优雅地关闭线程池?
- 线程池中核心线程和最大线程的区别?
- 线程池中任务队列满了会发生什么?
- 线程池的线程复用是怎么实现的?
五、高级机制与原理
- AQS(AbstractQueuedSynchronizer)是什么?
ReentrantLock的公平锁和非公平锁区别?- 读写锁
ReentrantReadWriteLock的原理? StampedLock的特点?Condition接口的作用?wait()、notify()、notifyAll()的区别?sleep()和wait()的区别?join()方法的作用?yield()方法的作用?- Java 内存模型(JMM)是什么?
六、场景与实战题
- 如何实现一个生产者-消费者模型?
- 如何实现一个线程安全的单例模式?
- 如何实现一个简单的线程池?
- 如何用多线程提高大文件处理速度?
- 如何用多线程实现定时任务调度?
- 如何用多线程实现批量任务并发执行并等待结果?
- 如何用多线程实现限流?
- 如何用多线程实现异步日志系统?
- 如何用多线程实现 Web 请求的异步处理?
- 如何排查和解决死锁问题?
✅ 总结
面试多线程时,考察的不仅是 API 使用,还包括底层原理(锁、JMM、CAS、AQS)、并发工具类(JUC)、线程池机制以及实际场景的设计能力。
