一、进程和线程
进程:好似一个在内存中运行的应用程序,拥有自己的内存空间,一个进程可以有多条线程。
![](https://i-blog.csdnimg.cn/blog_migrate/8f4271399d2de1c6aa1931164be62fa6.png)
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程:就是专门执行进程中的具体某一任务,一个进程至少有一条线程。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中不可缺少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
区别 | 进程 | 线程 |
根本区别 | 作为资源分配的单位 | 调度和执行单位 |
开销 | 每个线程都有独立的代码和数据空间,进程间的切换会有较大开销 | 线程可以看成轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,线程切换的开销小 |
所处环境 | 在操作系统中能同时运行多 个任务(程序) | 在同一应用程序中有多个顺序流同时执行 |
分配内存 | 系统在运行的时候会为每个进程分配不同的内存空间 | 除了CPU之外,不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源 |
包含关系 | 没有线程的进程是可以看作单线程的,如果一个进程内拥有多个进程,则执行过程不是一条线的,而是多条线共同完成的 | 线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程 |
二、并行与并发
并行:指在同一时刻,有多条指令在多个处理器上同时执行,所以无论从微观还是从宏观来看,二者都是一起执行的。
![](https://i-blog.csdnimg.cn/blog_migrate/9ab03da9c6594de3c86e91f644444814.png)
并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。
![](https://i-blog.csdnimg.cn/blog_migrate/6f43bf1ef3ddcb85e9a462627115e5ca.png)
三、创建线程
①继承Thread
②实现Runnable
都必须实现Thread类的run方法,调用start()方法开启线程。
三、线程生命周期
①第一个解释
新建(new Thread)
new一个Thread对象,并没有调用start()方法。
就绪(runnable)
调用start方法了,但是还没有分配到CPU执行权。
运行(running)
线程获得CPU资源正在执行run()方法里的程序。
死亡(dead)
线程执行完毕(执行完run()方法)或被别的线程杀死(调用stop()方法)。
阻塞(blocked)
由于某种原因线程放弃CPU执行权,暂停自己的执行。
![](https://i-blog.csdnimg.cn/blog_migrate/95b5282960cfe4e88ee5a599587e3650.png)
②第二个解释
![](https://i-blog.csdnimg.cn/blog_migrate/e08fef113f37979912685317dcc0b0aa.png)
新建(new)
运行(runnable)
阻塞(blocked)
等待(wait)
时间等待(time_wait)
停止(terminated)
![](https://i-blog.csdnimg.cn/blog_migrate/6699d3859fc16b3556a51cbc5ced744d.png)