Java 多线程核心概念与机制总结
1. 进程和线程的概念
- 进程:正在运行的程序实例。
- 线程:进程中负责程序执行的执行路径,一个进程可包含多个线程。
2. JVM 中的多线程体现
- 主线程
- 垃圾回收线程
- 自定义线程
3. 多线程的使用场景与目的
- 场景:需要多部分代码同时执行时。
- 目的:提高程序执行效率,充分利用 CPU 资源。
4. 创建线程的两种方式
- 继承 Thread 类
- 步骤:定义子类继承 Thread,重写 run 方法,实例化并调用 start 方法。
- 实现 Runnable 接口
- 步骤:定义类实现 Runnable 接口,实现 run 方法,将实例传递给 Thread 构造器,调用 start 方法。
5. 线程的 5 种状态
- 新建 (New):线程被创建但未启动。
- 运行 (Runnable):拥有执行资格和权限。
- 阻塞 (Blocked):释放执行权和锁,等待获取锁。
- 等待 (Waiting):有执行资格但无执行权,等待其他线程通知。
- 终止 (Terminated):线程结束,无执行资格和权限。
6. 线程安全问题
- 原因:多个线程操作共享数据;操作共享数据的代码有多条指令。
- 解决思想:封装共享数据,确保同一时刻只有一个线程执行相关代码。
- 实现方式:synchronized 关键字。
- 同步前提:需考虑锁的粒度与竞争条件。
- 同步形式:
- 同步函数:
public synchronized void run() {} - 同步代码块:
synchronized (lockObj) { ... }
- 同步函数:
- wait 和 sleep 的区别:
- wait 可指定时间也可不指定,sleep 必须指定时间。
- 在同步中,wait 释放执行权和锁,sleep 仅释放执行权不释放锁。
7. 线程间的通信(等待/唤醒机制)
- 概念:多个线程处理不同任务,但操作同一资源。
- 机制:使用锁对象上的
wait,notify,notifyAll方法。 - 生产者/消费者:多生产多消费场景,使用
while判断标记,配合notifyAll唤醒对方。
8. 停止线程的方式
- 原理:通过中断机制。
- 表现:调用 方法。

