【基础】多线程与多进程:并行编程基础
发布时间: 2024-06-28 23:11:48 阅读量: 79 订阅数: 131
![【基础】多线程与多进程:并行编程基础](https://yupuyang.gitlab.io/images/%E5%A4%9A%E7%BA%BF%E7%A8%8B/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.png)
# 1. **2.1.1 线程的定义和特点**
线程是程序执行流中的一个独立单元,它与其他线程共享同一进程的内存空间和资源。线程具有以下特点:
* **轻量级:**线程的创建和销毁比进程轻量得多,开销更小。
* **并发性:**多个线程可以同时执行,从而提高程序的并发能力。
* **共享性:**线程共享同一进程的内存空间和资源,可以方便地访问和修改全局变量。
* **独立性:**每个线程拥有自己的程序计数器和栈空间,可以独立执行自己的代码。
# 2. 多线程编程实践
### 2.1 多线程的基本概念和创建
#### 2.1.1 线程的定义和特点
线程是操作系统调度和管理的基本单位,它是一个轻量级的执行单元,共享同一个进程的地址空间和资源。线程具有以下特点:
- **轻量级:**线程比进程更轻量,创建和销毁线程的开销比进程小。
- **共享资源:**线程共享同一个进程的地址空间和资源,包括代码、数据和堆栈。
- **独立执行:**线程可以并发执行,每个线程都有自己的程序计数器和栈。
- **同步:**多个线程可以同时访问共享资源,需要使用同步机制来保证数据的一致性和完整性。
#### 2.1.2 线程的创建和管理
在 Java 中,可以使用 `Thread` 类来创建和管理线程。创建线程有两种主要方法:
- **继承 `Thread` 类:**创建一个继承自 `Thread` 类的子类,并重写 `run()` 方法来定义线程执行的逻辑。
- **实现 `Runnable` 接口:**创建一个实现 `Runnable` 接口的类,并重写 `run()` 方法。然后,使用 `Thread` 类的构造函数来创建线程,并传入 `Runnable` 对象。
```java
// 继承 Thread 类
public class MyThread extends Thread {
@Override
public void run() {
// 线程执行逻辑
}
}
// 实现 Runnable 接口
public class MyRunnable implements Runnable {
@Override
public void run() {
// 线程执行逻辑
}
}
public class Main {
public static void main(String[] args) {
// 创建线程
Thread thread1 = new MyThread();
Thread thread2 = new Thread(new MyRunnable());
// 启动线程
thread1.start();
thread2.start();
}
}
```
### 2.2 多线程的同步与通信
#### 2.2.1 同步机制:锁、信号量、条件变量
在多线程环境中,多个线程可能同时访问共享资源,导致数据不一致或损坏。为了保证数据的一致性和完整性,需要使用同步机制来协调线程之间的访问。常见的同步机制包括:
- **锁:**锁是一种互斥机制,它允许一次只有一个线程访问共享资源。
- **信号量:**信号量是一种计数器,它限制同时访问共享资源的线程数量。
- **条件变量:**条件变量是一种等待机制,它允许线程在满足特定条件时被唤醒。
#### 2.2.2 通信机制:共享内
0
0