1、介绍
进程(Process):
- 进程是程序在计算机中的一次执行活动,是程序的一次运行实例。每个进程都拥有独立的内存空间,包括代码、数据、堆栈等,同时还包含了进程控制块(PCB)用于管理进程的状态、优先级、资源占用等信息。
- 进程的作用是实现程序的并发执行,使得多个程序能够同时运行,每个进程之间相互独立,互不影响。进程之间通过进程间通信(IPC)来实现数据交换和协作。
- 进程在操作系统中扮演着资源管理的重要角色,操作系统通过进程管理来分配和回收系统资源,保证各个进程能够有序地运行。
线程(Thread):
- 线程是进程中的执行单元,一个进程可以包含多个线程,它们共享进程的资源(如内存空间、文件描述符等),但拥有独立的执行路径和栈空间。
- 线程的作用是实现程序的并发执行和提高程序的响应速度。多线程编程可以让程序在多个线程之间并行执行,提高系统的利用率和性能。
- 线程在操作系统中扮演着轻量级的执行单位,相比进程更加灵活和高效,可以更快地创建和销毁,更方便地实现并发编程和任务分配
1.1进程和线程的关系
- 进程是程序的一次执行活动,是程序的运行实例,而线程是进程中的执行单元,一个进程可以包含多个线程。
- 在操作系统中,每个进程至少包含一个主线程,可以创建额外的线程来实现并发执行。
- 线程共享进程的资源,包括内存空间、文件描述符等,多个线程之间可以方便地共享数据和通信。
-
区别:
- 资源占用:
- 进程拥有独立的内存空间和资源,每个进程之间相互独立,资源互不干扰,而线程共享进程的资源,包括内存、文件等,线程之间可以方便地共享数据和通信。
- 切换开销:
- 进程切换的开销比线程切换大,因为进程切换需要切换整个进程的上下文,包括内存空间、寄存器状态等,而线程切换只需要切换线程的上下文,开销较小。
- 并发性:
- 进程之间是相互独立的,每个进程有自己的执行路径和资源,进程的并发性体现在多个进程之间的并发执行;而线程共享进程的资源,线程的并发性体现在多个线程之间的并发执行。
- 创建销毁:
- 创建和销毁进程的开销比较大,因为进程拥有独立的资源空间,需要分配和回收资源;而创建和销毁线程的开销比较小,因为线程共享进程的资源,只需要分配和回收线程的执行路径即可。
2、线程中的常用方法
1.创建线程类:
1.1创建类 – MyThread
1.2继承Thread类
1.3重写run方法
2.启动线程:
2.1创建线程类的对象:MyThread thread = new MyThread();
2.2启动线程:thread.start();
代码展示:
MyTread类
public class MyThread extends Thread{
@Override
public void run() {
System.out.println("调用了run方法哦");
}
}
测试类
public class Test01 {
public static void main(String[] args) {
//创建子线程
MyThread thread = new MyThread();
//启动线程
thread.start();
}
}
3、多线程抢夺资源
需求:编写一个多线程的应用程序,主线程打印1-100之间的偶数,子线程打印1-100之间的奇数,观察其输出的结果,体会多线程互相争抢资源的场景
子线程
public class MyThread extends Thread{
@Override
public void run() {
for (int i = 1; i <=100; i=i+2) {
System.out.println("子线程:" + i);
}
}
}
主线程:
public class Test01 {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();//启动线程 -- 启动后,主线程抢到资源后代码就会向下执行
Thread main = new Thread();
for (int i = 2; i <=100 ; i=i+2) {
System.out.println("主线程"+i);
}
thread.start();
}
}
输出结果
总结
学习完进程和线程明白了多线程的优点;
- 提高程序响应速度:多线程可以使程序在执行过程中响应用户的操作,提高用户体验。
- 提高系统资源利用率:多线程可以充分利用多核处理器的性能,提高系统资源利用率。
- 简化编程模型:多线程可以将复杂任务分解成多个线程,简化程序设计和维护。