【Java教程】Day15-01 多线程:进程与线程的基础知识

​1. 现代操作系统的多任务处理

在现代计算机操作系统中(如 Windows、macOS、Linux),可以执行多个任务同时运行,这种技术叫做多任务处理。尽管CPU是单核的,也能通过操作系统的调度让多个任务看起来像是同时执行的。

1.1 多任务的原理

CPU执行代码时,实际上是按照一条一条指令顺序执行的,但操作系统通过时间分片技术,让CPU轮流执行多个任务。即便是单核CPU,它也能在极短的时间内切换任务,使得用户感受到多个任务同时运行。

举个例子:想象一下你有三门作业需要做,语文、数学和英语,每个作业花费30分钟。你可能会选择1分钟做语文作业,然后1分钟做数学作业,再1分钟做英语作业。这样轮流切换的过程,在旁观者看来,似乎你是在同时做三门作业。实际上,操作系统就是通过这种方式,让多个任务交替执行,给人一种并行处理的感觉。

1.2 多任务的执行方式

操作系统通过调度算法,轮流让多个进程或线程占用CPU。例如,操作系统可以让浏览器运行0.001秒,接着是QQ执行0.001秒,再是音乐播放器执行0.001秒。所有任务轮流执行,最终给用户呈现出“同时进行”的效果。

2. 进程与线程

在计算机中,任务的基本单位叫做进程,而进程内部可能包含多个子任务,这些子任务叫做线程。举例来说,浏览器是一个进程,视频播放器是另一个进程。每个进程内部可以同时执行多个任务,比如在使用Word时,可以同时打字、拼写检查和后台打印。

2.1 进程与线程的关系
  • 一个进程至少有一个线程。

  • 一个进程可以包含多个线程。

示意图:

arduino        ┌──────────┐        │  Process │        │ ┌──────┐ │        │ │Thread│ │        │ └──────┘ │        └──────────┘
2.2 操作系统调度的最小单位

操作系统调度的最小单位是线程。现代操作系统(如Windows、Linux)通常采用抢占式多任务处理机制,操作系统决定线程何时执行以及执行多长时间。程序员无法直接控制线程的执行顺序。

3. 多进程与多线程

实现多任务的方式可以有很多种,最常见的包括多进程、单进程多线程和多进程加多线程。具体选择哪种方式,取决于任务的特点和系统的需求。

3.1 多进程模式

在多进程模式下,每个进程都只有一个线程。进程间互相独立,一个进程崩溃不会影响其他进程。常见的操作系统如Windows和Linux都支持多进程。

示意图:

arduino┌──────────┐ ┌──────────┐ ┌──────────┐│ Process  │ │ Process  │ │ Process  ││ ┌──────┐ │ │ ┌──────┐ │ │ ┌──────┐ ││ │Thread│ │ │ │Thread│ │ │ │Thread│ ││ └──────┘ │ │ └──────┘ │ │ └──────┘ │└──────────┘ └──────────┘ └──────────┘
3.2 多线程模式

在多线程模式下,单个进程内部可以包含多个线程。这种方式更高效,因为线程之间的通信速度非常快(共享内存)。

示意图:

mathematica┌────────────────────┐│      Process       ││  ┌──────┐ ┌──────┐ ││  │Thread│ │Thread│ ││  └──────┘ └──────┘ ││  ┌──────┐ ┌──────┐ ││  │Thread│ │Thread│ ││  └──────┘ └──────┘ │└────────────────────┘
3.3 多进程+多线程模式

最复杂的模式是多进程和多线程的结合,每个进程都包含多个线程。该模式适用于一些需要高并发和高可靠性的应用。

示意图:

mathematica┌──────────┐┌──────────┐┌──────────┐│ Process  ││ Process  ││ Process  ││ ┌──────┐ ││ ┌──────┐ ││ ┌──────┐ ││ │Thread│ ││ │Thread│ ││ │Thread│ ││ └──────┘ ││ └──────┘ ││ └──────┘ ││ ┌──────┐ ││ ┌──────┐ ││ ┌──────┐ ││ │Thread│ ││ │Thread│ ││ │Thread│ ││ └──────┘ ││ └──────┘ ││ └──────┘ │└──────────┘└──────────┘└──────────┘

4. 进程与线程的对比

进程和线程是多任务执行的两种基本方式。进程是资源管理的基本单位,而线程是程序执行的基本单位。它们有以下不同之处:

4.1 进程的特点:
  • 创建和销毁开销大:创建一个新进程通常比创建一个新线程花费更多的时间和系统资源。

  • 进程间通信较慢:进程间通信需要使用较复杂的机制(如管道、消息队列等),因此比线程间通信要慢。

4.2 线程的特点:
  • 创建和销毁开销小:线程创建的速度比进程快,系统资源消耗较少。

  • 线程间通信更高效:线程共享内存空间,通信非常快速。

  • 稳定性较低:如果一个线程崩溃,可能会导致整个进程崩溃。

5. Java中的多线程编程

在Java中,每个Java程序都可以看作是一个进程,而Java的多线程功能使得我们可以在一个程序中同时执行多个任务。Java提供了多种方式来创建线程:

  • 继承Thread类:通过继承Thread类并重写run()方法来创建线程。

  • 实现Runnable接口:通过实现Runnable接口并将其传递给Thread构造方法来创建线程。

5.1 创建线程的方式

1. 继承Thread类

javaclass MyThread extends Thread {    @Override    public void run() {        System.out.println("线程正在运行...");    }}public class Main {    public static void main(String[] args) {        MyThread t = new MyThread();        t.start(); // 启动线程    }}

2. 实现Runnable接口

javaclass MyRunnable implements Runnable {    @Override    public void run() {        System.out.println("线程正在运行...");    }}public class Main {    public static void main(String[] args) {        MyRunnable myRunnable = new MyRunnable();        Thread thread = new Thread(myRunnable);        thread.start(); // 启动线程    }}

5.2 多线程的同步问题

在多线程编程中,多个线程可能会共享资源。为了避免线程之间的竞争条件,Java提供了多种同步机制,如synchronized关键字。

javaclass Counter {    private int count = 0;        public synchronized void increment() {        count++;    }}

6. 总结

多线程是Java程序并发执行的核心概念。通过掌握多线程的基本原理和Java中的多线程编程技巧,开发者能够编写高效的并发程序,提高程序的性能和响应速度。在实际开发中,多线程应用广泛,尤其在网络编程、图形用户界面和后台任务处理等场景中不可或缺。

7. 参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值