一、线程创建(4 种方式,核心记前 2 种)
1. 继承 Thread 类
java
class MyThread extends Thread {
public void run() { ... }
}
new MyThread().start();
2. 实现 Runnable 接口(最常用)
java
new Thread(() -> { ... }).start();
3. 实现 Callable 接口(带返回值)
配合 FutureTask 使用。
4. 线程池创建(企业标准用法)
通过 ExecutorService 创建,最推荐。
二、线程生命周期(6 个状态,必背)
1. NEW(新建)
创建了线程对象,但还没调用 start()。
2. RUNNABLE(可运行)
调用了 start(),正在等待CPU 或 正在运行。
3. BLOCKED(阻塞)
等待锁,进不去同步代码块。
4. WAITING(无限等待)
调用 wait()、join()、park(),需要别人唤醒。
5. TIMED_WAITING(限时等待)
sleep(1000)、wait(1000),时间到自动醒。
6. TERMINATED(终止)
run 方法执行完毕 / 异常退出。
三、线程池(重点!企业开发 100% 用)
1. 为什么要用线程池?
- 避免频繁创建销毁线程,提升性能
- 控制并发数量,防止OOM
- 统一管理线程
2. 线程池 7 大参数(面试必考)
corePoolSize:核心线程数maximumPoolSize:最大线程数keepAliveTime:非核心线程空闲存活时间unit:时间单位workQueue:阻塞队列threadFactory:线程工厂handler:拒绝策略
3. 线程池执行流程(一句话记)
任务来了 → 核心线程满了 → 进队列 → 队列满了 → 开非核心线程 → 达到最大线程 → 拒绝策略。
4. 4 种拒绝策略
- AbortPolicy:抛异常(默认)
- CallerRunsPolicy:返回给调用者执行
- DiscardPolicy:直接丢掉
- DiscardOldestPolicy:丢掉最老任务
5. 常用线程池(Executors)
newFixedThreadPool固定线程newCachedThreadPool缓存线程newScheduledThreadPool定时任务newSingleThreadExecutor单线程