学习大纲:
程序:
为了完成任务,用某种语言编写的一组指令集和;也可以理解为一个Java程序的.java文件。
解释:(没有运行的贪吃蛇就是一个程序:为了完成开发贪吃蛇游戏,用java语言编写贪吃蛇游戏代码,形成的贪吃蛇.java就是一个程序。)
进程:
进程就是,提供让指定程序运行起来的需要的条件,并将程序无误的运行起来。
解释:(我们要运行贪吃蛇.java程序,需要提供配置好的Java环境(JDK...),Java环境配置无误,方能让正确的贪吃蛇.java程序运行起来。)
进程作为系统资源分配的单位,系统在运行的时候会为每个进程分配不同的内存区域。
线程:
线程即,进程的分模块;一个进程中至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。线程是进程中的一个执行单元。
线程作为处理器任务调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小。
一个进程中的多个线程共享相同的内存单元/内存地址空间,它们从同一堆中分配对象,可以访问相同的变量和对象。这就使得线程间的通信更加简便和高效;但是多个线程操作共享的系统资源就会带来安全隐患的问题。
线程即,进程中的一个执行任务(控制单元),负责当前进程中程序的执行。
与进程不同的是同进程的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器和虚拟机栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
进程可以进一步细化为线程,是一个程序内部的一条执行路径。
一个 Java 程序的运行是 main 线程和多个其他线程同时运行。
并发:
并发,在同一时间,一个CPU执行多个任务;
解释:(类似,商品秒杀,在同一时间,多个人去抢相同的商品。)
并行:
并行,在同一时间,多个CPU执行多个任务;
解释:(在超市购物,有多个商品,多个人分别购买不同的商品。)
多线程:
一个进程在同一时间并行执行多个线程,就是支持多线程的。
在图形化界面中,我们可以更加灵活的在同一程序中操作不同的模块内容;
在如下的电脑管家程序中,我们可以同时操作:病毒查杀、垃圾清理...其病查杀和垃圾清理等都是电脑管家程序中的一个线程;一个程序在同一时间执行不同的操作就是多线程。
内存的结构图:
每个线程都有一份独立的虚拟机栈和程序计数器,并且共享进程中的方法区和栈。
线程和进程的区别:
线程与进程,你真的清楚吗?
https://baijiahao.baidu.com/s?id=1687308494061329777&wfr=spider&for=pc线程和进程的区别
https://blog.csdn.net/kuangsonghan/article/details/80674777
1.根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位,线程之间共享进程资源。
2.开销方面:每个进程都有独立的代码和数据空间(程序上下文 Thread context),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
3.所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行,CPU来回切换,执行多个线程。)
4.内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),多个线程之间共享资源。
5.包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。