创建线程方式
必背极简关键字
1. 继承 Thread;2. 实现 Runnable;3.Callable+FutureTask(有返回值);4. 线程池(企业主流)
考场一句话速答
四种方式:继承 Thread 类、实现 Runnable 接口、Callable 搭配 FutureTask 支持返回值,项目里优先用线程池创建管理线程。
记忆小窍门
线程的状态
必背极简关键字
新建 NEW;可运行 RUNNABLE;同步阻塞 BLOCKED;无限等待 WAITING;限时等待 TIMED_WAITING;终止 TERMINATED 区分:synchronized 阻塞 = BLOCKED;sleep/wait = 等待;sleep 不释放锁,wait 释放锁
考场一句话速答
线程六大状态:新建、可运行、同步阻塞、无限等待、限时等待、终止。synchronized 锁失败进入阻塞,sleep、wait 等进入等待,执行完毕进入终止。
记忆小窍门
新(NEW)跑(RUNNABLE)堵(BLOCKED)等(WAITING/TIMED_WAITING)死(TERMINATED); 锁抢不到 = 堵;主动睡觉 = 等;带时间 = 限时等,不带 = 无限等。
线程池拒绝策略
必背极简关键字
Abort 抛异常(默认);CallerRuns 交给调用线程执行;Discard 丢掉新任务;DiscardOldest 丢弃队列最老任务
考场一句话速答
线程池四种拒绝策略:默认抛异常;调用者线程执行;丢弃新任务;丢弃队列里最旧任务;业务可自定义策略。
记忆小窍门
Abort= abort 终止抛错;Caller = 调用者干活;Discard = 扔新来的;DiscardOldest = 扔老旧的保新任务。
为什么不建议executors创建线程池线程安全的方案
必背极简关键字
Executors 隐患:无界队列 / 线程无上限,高并发 OOM;推荐手写 ThreadPoolExecutor,限定队列、最大线程。
考场一句话速答
Executors 容易出现无界队列或无限创建线程,并发量大造成内存溢出;规范要求手动创建 ThreadPoolExecutor,限制队列长度和最大线程数。
记忆小窍门
Executors 图省事没限制,任务 / 线程无限涨爆内存;手写线程池卡死上限,可控不雪崩。
什么是threadlocal,怎么实现的,应用场景,内存泄漏问题,怎么解决
必背极简关键字
线程私有隔离;数据存在线程的 ThreadLocalMap;key 弱引用、value 强引用;线程池复用易内存泄露;用完必须 remove。
考场一句话速答
ThreadLocal 实现线程私有变量隔离,数据存在线程自身的 ThreadLocalMap;因 value 强引用在线程池场景易内存泄漏,规范用完调用 remove 清理。
记忆小窍门
数据在线程身上,不在 ThreadLocal;key 弱能自动回收,value 强不行;线程不死垃圾清不掉,手动 remove 兜底。
synchronized是怎么实现的,锁的是什么,如何保证原子性,可见性,有序性,锁升级
必背极简关键字
底层:monitor 指令 / ACC_SYNCHRONIZED,基于对象头 Mark Word; 锁对象:实例锁锁 this,静态锁锁 Class; 三大特性:独占保原子、主存刷新保可见、禁止重排保有序; 锁升级:偏向→轻量级→重量级,只升不降;偏向无 CAS,轻量级自旋 CAS,重量级内核阻塞。
考场一句话速答
synchronized 基于对象头和 Monitor 实现,实例锁锁对象、静态锁锁 Class;独占保证原子,内存刷新保证可见,禁止重排保证有序;JDK1.6 引入锁升级:偏向锁、轻量级锁、重量级锁,单向升级不可降级。
记忆小窍门
锁绑对象不绑代码; 原子 = 独一份执行,可见 = 强制刷主存,有序 = 不许乱排; 没人抢偏向,轮流抢轻量自旋,疯狂抢变重量级。
synchronized,reentrantlock*区别
必背极简关键字
synchronized:JVM 关键字、自动解锁、非公平、不可中断、无多条件; ReentrantLock:AQS 实现、手动 lock/unlock、可选公平 / 非公平、支持限时 tryLock、可中断、多 Condition;二者都可重入。
考场一句话速答
synchronized 是 JVM 原生关键字自动释放锁,只支持非公平锁,功能简单;ReentrantLock 基于 AQS 手动管控锁,支持公平锁、限时尝试、可中断、多条件唤醒,功能更灵活,二者都支持锁重入。
记忆小窍门
synchronized 省心不用手动开锁关锁,功能固定;ReentrantLock 手动管控,功能丰富自由度高;竞争不大两者性能差不多。
volatile是什么,保证什么性,为什么不能保证原子性
必背极简关键字
volatile:轻量级;保可见性、禁重排;不保原子性;复合操作(i++)并发出错;无排他锁。
考场一句话速答
volatile 修饰变量保证多线程可见性,禁止指令重排序,但没有互斥能力,无法屏蔽多线程并发穿插,因此不能保证 i++ 这类复合操作的原子性。
记忆小窍门
看得见(可见)、不乱跑(禁止重排);拦不住多线程一起动手,加减拆分步骤一定会出错;简单读写没问题,运算不行。
cas是什么,有什么问题
必背极简关键字
CAS:比较交换、乐观锁、CPU 原语;三大缺陷:ABA、自旋耗 CPU、仅支持单个变量。
考场一句话速答
CAS 是乐观无锁,对比预期值和内存值一致才更新;存在 ABA、自旋浪费 CPU、无法操作多变量三个缺点。
记忆小窍门
先对比再修改;ABA 是兜兜转转变回原样;一直重试吃 CPU;只管一个变量,多变量不行。
如何理解AQS
必背极简关键字
AQS=JUC 锁底层骨架;state 记录锁状态;CLH 双向队列存等待线程;独占 / 共享双模式;模板方法,子类重写抢锁规则。
考场一句话速答
AQS 是并发锁底层通用框架,依靠 state 标识锁状态、双向队列存放等待线程,分独占和共享模式;AQS 封装排队唤醒通用逻辑,子类只需要实现尝试获取 / 释放锁的规则。
记忆小窍门
state 管锁,队列管人;抢不到去排队,释放唤队首;框架做通用流程,子类定制上锁规则。
什么是公平锁和非公平锁
必背极简关键字
公平:按排队顺序,先到先得,无饥饿,吞吐低; 非公平:允许新线程插队,效率高吞吐高,可能饥饿; synchronized 固定非公平,ReentrantLock 可选。
考场一句话速答
公平锁严格按请求顺序排队拿锁,不会插队;非公平锁允许新来线程直接争抢,效率更高但可能线程饥饿;synchronized 是非公平,ReentrantLock 两种都支持。
记忆小窍门
公平 = 守规矩排队;非公平 = 能抢就抢不讲顺序;追求稳定无饥饿选公平,追求性能选非公平。