授课语音

Java 多线程简介

1. 线程和进程的定义

  • 进程:进程是程序的运行实例,每个进程都有自己独立的内存空间,进程之间互不干扰。操作系统通过进程来管理和调度程序的执行。

  • 线程:线程是进程中的一个独立执行单元,一个进程可以包含多个线程。线程共享进程的资源(如内存),可以更高效地完成并发任务。

  • 特点

    • 进程相互隔离,线程共享同一进程的资源。
    • 线程之间的通信比进程更容易和高效。
    • 多线程程序可以实现并发执行,提高程序的响应速度和资源利用率。

2. 线程的生命周期

线程的生命周期分为以下几个状态:

  1. 新建(New):创建一个线程对象,但还没有启动线程。
  2. 就绪(Runnable):线程已经创建并启动,等待被 CPU 调度执行。
  3. 运行(Running):线程获得 CPU 资源,正在执行任务。
  4. 阻塞(Blocked):线程因等待资源或其他原因暂停执行,直到满足特定条件才能继续执行。
  5. 死亡(Terminated):线程执行完任务或发生异常而退出运行。
  • 线程状态图:线程生命周期的转换过程可以用下图表示: Image___1397757897436895036===badd2c301431c3ee1142e607c5da4c58===1_1.png___

3. 多线程的创建方式

Java 提供了多种方式来创建线程,以下是两种常用方法:

  1. 继承 Thread 类
  2. 实现 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. 多线程的应用场景

多线程适用于多个任务并发执行的场景,能够提高程序的效率和响应速度。常见的应用场景包括:

  1. 并发处理:例如在大型服务器上处理大量并发请求,采用多线程可以更高效地处理每个请求。
  2. 任务分解:将一个复杂的任务分解成多个独立的线程并行执行,例如在图像处理、音视频处理、科学计算等领域,线程可以有效分担工作负载。
  3. 多任务管理:在桌面应用程序中,将 UI 线程和后台任务分离,确保用户界面流畅响应,而后台执行耗时任务。
  4. 实时数据处理:如实时监控系统或金融市场分析系统,需要多线程来处理和更新动态数据。

总结

本课介绍了 Java 中线程和进程的基本概念,线程的生命周期,以及创建多线程的两种主要方式,并提供了相应代码示例。通过掌握多线程的创建方式和应用场景,可以更好地实现并发任务管理和资源优化。

去1:1私密咨询

系列课程: