文章目录
- 一、关于操作系统
- 一、认识进程 process
- 二、认识线程
- 三、进程和线程的区别(重点!)
- 四、Java的线程和操作系统线程的关系
- 五、第一个多线程编程
一、关于操作系统
【操作系统】
-
驱动程序:
如:我们知道JDBC的驱动程序,就是让JDBC和各个数据厂商的API进行适配。
由于硬件设备的种类繁多,厂商也各异。所以硬件厂商在开发硬件的同时会提供驱动,电脑装了对应的驱动,才能让系统正确识别硬件设备。 -
操作系统内核:
操作系统的核心功能(管理,对上,对下)。 -
系统调用:
操作系统给应用程序提供的API。
比如:有个程序想操作一下硬件设备,就需要先通过系统调用,把操作命令告诉给系统内核,内核调用驱动程序,进一步的操作硬件设备。
一、认识进程 process
1. 概念
一个运行起来的程序,就是一个“进程”,如果没运行起来,就不算进程,可以叫做“程序”。进程(process)也可以叫做任务(task)。
进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;
同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
2. 进程控制抽象块(PCB Process Control Block)
计算机内部要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据。在Java语言中,我们可以通过 类/对象 来描述这一特征。
// 以下代码是 Java 代码的伪码形式,重在说明,无法直接运行
class PCB {// 进程的唯一标识 —— pid;// 进程关联的程序信息,例如哪个程序,加载到内存中的区域等// 分配给该资源使用的各个资源// 进度调度信息(留待下面讲解)
}
这样,每一个PCB对象,就代表者一个实实在在运行着的程序,也就是进程。
操作系统再通过这种数据结构,如:线性表、搜索树等PCB对象组织起来,方便管理时进行增删改查的操作。
二、认识线程
1. 线程是什么?
一个线程就是一个“执行流”,每个线程之间都可以按照顺序执行自己的代码,多个线程之间“同时”执行着多份代码。
2. 为什么要有线程?
(1)“并发编程”成为刚需。
- 单核CPU的发展遇到了瓶颈,要想提高算力,就需要多核CPU。而并发编程能更充分利用多核CPU资源。
- 有些任务场景需要“等待IO”,为了让等待IO的时间能够去做一些其他的工作,也需要用到并发编程。
(2)虽然多进程也能实现并发编程,但是线程比进程更轻量。
- 创建线程比创建进程更快;
- 销毁线程比销毁进程更快;
- 调度线程比调度进程更快。
(3)虽然线程比进程轻量,但是人们还不满足,于是有了“线程池” (ThreadPool)和 “协程”(Coroutine)。
三、进程和线程的区别(重点!)
- 进程包含线程。每个进程至少有一个线程存在,即主线程。
- 进程和进程之间不共享内存空间,同一个进程的线程之间共享一个内存空间。
- 进程是系统分配资源的最小单位,线程是系统调度的最小单位。
四、Java的线程和操作系统线程的关系
线程是操作系统中的概念,操作系统内核实现了线程这样的机制,并且对用户提供了一些API供用户使用(例如 Linux 的 pthread库)
五、第一个多线程编程
【代码】
//写一个类,继承自标准库的Thread
class MyThread extends Thread {@Overridepublic void run() {System.out.println("hello word!");}
}
public class ThreadDemo1 {public static void main(String[] args) {//创建线程,是希望线程成为一个独立的执行流(执行一段代码)//创建线程是相当于雇了个人帮我们干活Thread t = new MyThread(); //这里就不用new标准库的thread的了,而是刚才创建的子类t.start(); //线程中的特殊方法,启动一个线程}
}
【运行结果】