Java 线程与进程基础
多线程是 Java 并发编程的核心。理解线程和进程的概念是掌握并发编程的基础。本章将详细介绍 Java 中线程与进程的基础知识。
线程 vs 进程
进程(Process)
进程是操作系统分配资源的基本单位,是程序的一次执行过程。
特点:
- 独立内存空间:每个进程有独立的内存空间
- 资源隔离:进程之间相互独立,互不影响
- 开销大:创建和切换进程开销较大
- 通信复杂:进程间通信需要使用 IPC(进程间通信)机制
// 进程示例:运行一个 Java 程序就是一个进程
public class ProcessExample {
public static void main(String[] args) {
// 这是一个进程
System.out.println("进程 ID:" + ProcessHandle.current().pid());
}
}
线程(Thread)
线程是进程内的执行单元,是 CPU 调度的基本单位。
特点:
- 共享内存空间:同一进程内的线程共享内存
- 轻量级:创建和切换线程开销较小
- 通信简单:线程间可以直接共享数据
- 需要同步:共享数据需要同步机制保护
// 线程示例
public class ThreadExample {
public static void main(String[] args) {
Thread thread = new Thread(() -> {
System.out.println("线程执行");
});
thread.start();
}
}
进程 vs 线程对比
| 特性 | 进程 | 线程 |
|---|---|---|
| 资源分配 | 独立内存空间 | 共享内存空间 |
| 创建开销 | 大 | 小 |
| 切换开销 | 大 | 小 |
| 通信方式 | IPC(复杂) | 共享内存(简单) |
| 独立性 | 完全独立 | 相互影响 |
| 数量 | 较少 | 可以很多 |
为什么使用多线程
多线程的优势:
- 提高效率:充分利用多核 CPU
- 响应性:避免阻塞,提高用户体验
- 资源利用:更好地利用系统资源
- 并发处理:同时处理多个任务
Thread 类与 Runnable 接口
Thread 类
Thread 类是 Java 中表示线程的类。
import java.lang.Thread;
// 获取当前线程
Thread currentThread = Thread.currentThread();
System.out.println("当前线程:" + currentThread.getName());
// 线程的基本操作
Thread thread = new Thread();
thread.start(); // 启动线程
thread.join(); // 等待线程结束
thread.sleep(1000); // 线程休眠(静态方法)
Runnable 接口
Runnable 接口定义了线程要执行的任务。
@FunctionalInterface
public interface Runnable {
void run();
}
特点:
- 函数式接口(Java 8+)
- 只有一个
run()方法 - 可以用于 Lambda 表达式
// 实现 Runnable
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("任务执行");
}
};
// 使用 Lambda 表达式
Runnable task2 = () -> System.out.println("任务执行");
Thread 和 Runnable 的关系
Thread 类实现 了 Runnable 接口:
public class Thread implements Runnable {
private Runnable target;
public void run() {
if (target != null) {
target.run();
}
}
}