第一章:多线程一、进程与线程
2022-09-28 22:04 阿方技术圈 阅读(29) 评论(0) 收藏 举报一、进程
在计算机中,CPU是核心的硬件资源,承担了所有的计算任务;内存资源承担了运行时数据的保存任务;外存资源(硬盘等)承担了数据外部永久存储的任务。其中,计算任务的调度、资源的分配由操作系统来统领。应用程序以进程的形式运行于操作系统之上,享受操作系统提供的服务
一般来说,一个进程由程序段、数据段和进程控制块三部分组成

程序段一般也被称为代码段。代码段是进程的程序指令在内存中的位置,包含需要执行的指令集合;数据段是进程的操作数据在内存中的位置,包含需要操作的数据集合;程序控制块(Program Control Block,PCB)包含进程的描述信息和控制信息,是进程存在的唯一标志。
Java编写的程序都运行在Java虚拟机(JVM)中,每当使用Java命令启动一个Java应用程序时,就会启动一个JVM进程。在这个JVM进程内部,所有Java程序代码都是以线程来运行的。JVM找到程序的入口点main()方法,然后运行main()方法,这样就产生了一个线程,这个线程被称为主线程。当main()方法结束后,主线程运行完成,JVM进程也随即退出。
二、线程
线程是指“进程代码段”的一次顺序执行流程。线程是CPU调度的最小单位。一个进程可以有一个或多个线程,各个线程之间共享进程的内存空间、系统资源,进程仍然是操作系统资源分配的最小单位。
Java程序的进程执行过程就是标准的多线程的执行过程。每当使用Java命令执行一个class类时,实际上就是启动了一个JVM进程。理论上,在该进程的内部至少会启动两个线程,一个是main线程,另一个是GC(垃圾回收)线程。
一个标准的线程主要由三部分组成,即线程描述信息、程序计数器(Program Counter,PC)和栈内存

在线程的结构中,线程描述信息即线程的基本信息,主要包括:(1)线程ID(Thread ID,线程标识符)。线程的唯一标识,同一个进程内不同线程的ID不会重叠。(2)线程名称。主要是方便用户识别,用户可以指定线程的名字,如果没有指定,系统就会自动分配一个名称。(3)线程优先级。表示线程调度的优先级,优先级越高,获得CPU的执行机会就越大。(4)线程状态。表示当前线程的执行状态,为新建、就绪、运行、阻塞、结束等状态中的一种。(5)其他。例如是否为守护线程等。在线程的结构中,程序计数器很重要,它记录着线程下一条指令的代码段内存地址。在线程的结构中,栈内存是代码段中局部变量的存储空间,为线程所独立拥有,在线程之间不共享。
三、进程与线程的区别
(1)线程是“进程代码段”的一次顺序执行流程。一个进程由一个或多个线程组成,一个进程至少有一个线程。
(2)线程是CPU调度的最小单位,进程是操作系统分配资源的最小单位。线程的划分尺度小于进程,使得多线程程序的并发性高。
(3)线程是出于高并发的调度诉求从进程内部演进而来的。线程的出现既充分发挥了CPU的计算性能,又弥补了进程调度过于笨重的问题。
(4)进程之间是相互独立的,但进程内部的各个线程之间并不完全独立。各个线程之间共享进程的方法区内存、堆内存、系统资源(文件句柄、系统信号等)。
(5)切换速度不同:线程上下文切换比进程上下文切换要快得多。所以,有的时候,线程也称为轻量级进程。
浙公网安备 33010602011771号