第1课_多线程的简介
热度🔥:102 免费课程
授课语音
Java 多线程简介
1. 线程和进程的定义
进程:进程是程序的运行实例,每个进程都有自己独立的内存空间,进程之间互不干扰。操作系统通过进程来管理和调度程序的执行。
线程:线程是进程中的一个独立执行单元,一个进程可以包含多个线程。线程共享进程的资源(如内存),可以更高效地完成并发任务。
特点:
- 进程相互隔离,线程共享同一进程的资源。
- 线程之间的通信比进程更容易和高效。
- 多线程程序可以实现并发执行,提高程序的响应速度和资源利用率。
2. 线程的生命周期
线程的生命周期分为以下几个状态:
- 新建(New):创建一个线程对象,但还没有启动线程。
- 就绪(Runnable):线程已经创建并启动,等待被 CPU 调度执行。
- 运行(Running):线程获得 CPU 资源,正在执行任务。
- 阻塞(Blocked):线程因等待资源或其他原因暂停执行,直到满足特定条件才能继续执行。
- 死亡(Terminated):线程执行完任务或发生异常而退出运行。
- 线程状态图:线程生命周期的转换过程可以用下图表示:
3. 多线程的创建方式
Java 提供了多种方式来创建线程,以下是两种常用方法:
- 继承 Thread 类
- 实现 Runnable 接口
代码案例:
方式 1:继承 Thread
类
// 创建一个线程类,继承 Thread 类
class MyThread extends Thread {
@Override
public void run() {
// run 方法定义了线程的任务
for (int i = 0; i < 5; i++) {
System.out.println("这是线程 " + Thread.currentThread().getName() + " 的输出:i = " + i);
try {
// 让线程休眠 500 毫秒,模拟耗时操作
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadExample {
public static void main(String[] args) {
// 创建并启动线程
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.start(); // 启动线程 1
thread2.start(); // 启动线程 2
}
}
解释:通过继承 Thread
类,并重写 run()
方法定义线程任务。使用 start()
方法启动线程。
方式 2:实现 Runnable
接口
// 创建一个实现 Runnable 接口的类
class MyRunnable implements Runnable {
@Override
public void run() {
// 定义线程的任务
for (int i = 0; i < 5; i++) {
System.out.println("这是线程 " + Thread.currentThread().getName() + " 的输出:i = " + i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class RunnableExample {
public static void main(String[] args) {
// 创建 Runnable 对象
MyRunnable myRunnable = new MyRunnable();
// 创建并启动线程
Thread thread1 = new Thread(myRunnable);
Thread thread2 = new Thread(myRunnable);
thread1.start();
thread2.start();
}
}
解释:通过实现 Runnable
接口并重写 run()
方法定义线程任务。Runnable
接口适用于多个线程共享同一个任务的情况。
4. 多线程的应用场景
多线程适用于多个任务并发执行的场景,能够提高程序的效率和响应速度。常见的应用场景包括:
- 并发处理:例如在大型服务器上处理大量并发请求,采用多线程可以更高效地处理每个请求。
- 任务分解:将一个复杂的任务分解成多个独立的线程并行执行,例如在图像处理、音视频处理、科学计算等领域,线程可以有效分担工作负载。
- 多任务管理:在桌面应用程序中,将 UI 线程和后台任务分离,确保用户界面流畅响应,而后台执行耗时任务。
- 实时数据处理:如实时监控系统或金融市场分析系统,需要多线程来处理和更新动态数据。
总结
本课介绍了 Java 中线程和进程的基本概念,线程的生命周期,以及创建多线程的两种主要方式,并提供了相应代码示例。通过掌握多线程的创建方式和应用场景,可以更好地实现并发任务管理和资源优化。