面试被问倒的 3 个并发问题:线程池参数、锁升级、伪共享
一、引言 并发编程是后端面试的必考题,但很多开发者只是死记硬背答案,遇到深入追问就露馅了。今天我要拆解三个高频并发问题,不仅告诉你答案,更要讲清楚背后的原理。 核心观点:理解并发问题的关键在于从底层原理出发——线程池参数要结合业务场景,锁升级要理解对象头结构,伪共享要明白 CPU 缓存机制。 二、线程池参数:核心线程数到底怎么算? 2.1 错误认知:CPU 核数 + 1 很多人背的答案是"CPU 核心数 + 1",但这只适用于特定场景。线程池参数的设置需要结合任务类型来决定。 2.2 任务类型分类 任务类型特点典型场景 CPU 密集型任务主要消耗 CPU 资源,几乎不等待数据计算、排序、加密解密 IO 密集型任务大部分时间在等待 IO 操作数据库查询、网络请求、文件读写 混合型CPU 计算和 IO 操作都有Web 服务处理、API 网关 2.3 计算公式 CPU 密集型任务: 核心线程数 = CPU 核心数 + 1 理由:当一个线程被暂停(如页缺失),额外的一个线程可以利用这段时间继续执行,最大化 CPU 利用率。 IO 密集型任务: 核心线程数 = CPU 核心数 ×....