【认知:进程/线程,并发/并行,生命周期】

本文深入探讨了进程和线程的概念,进程作为程序的实例拥有独立的内存空间,而线程是操作系统调度的基本单位,可共享进程内存。讨论了并发和并行的区别,并详细阐述了线程的六个生命周期阶段:新建、可运行、运行、等待、阻塞、超时等待和销毁。线程状态的转换和不同状态的特点也被详细解释。
摘要由CSDN通过智能技术生成

进程,就是正在运行的程序,如.exe。每个进程都有自己的存储空间。

线程,就是操作系统的最小调度单位。一个进程可以有很多个线程。进程中的线程共享进程的内存。

理论上,一个进程可以有很多线程,每条线程并行执行不同的任务。

串行

如排队一样,每次处理一个线程。

并发

多个线程时,如果系统只有一个处理机(CPU),他不可能同时进行一个以上的线程,必须将CPU运行时间进行划分,将时间段分配给每一个线程。

并发量,一段时间内处理的请求数量。

并行

同一个时间点能够处理的程序个数。并行是指“并排行走”或“同时实行或实施”。

在操作系统中是指,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的。

线程的生命周期:

线程的生命周期包含6个阶段:

包括:创建、运行、等待,超时等待,阻塞、死亡。

线程的生命周期及其六种状态的转换 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/267331681#:~:text=%EE%80%80%E7%BA%BF%E7%A8%8B%EE%80%81%E7%9A%84%E5%85%AD%E7%A7%8D%EE%80%80%E7%8A%B6%E6%80%81%E7%BA%BF%E7%A8%8B%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%EE%80%81%E4%B8%BB%E8%A6%81%E6%9C%89%E4%BB%A5%E4%B8%8B%E5%85%AD%E7%A7%8D%EE%80%80%E7%8A%B6%E6%80%81%EE%80%81%EF%BC%9A,New%EF%BC%88%E6%96%B0%E5%88%9B%E5%BB%BA%EF%BC%89Runnable%EF%BC%88%E5%8F%AF%E8%BF%90%E8%A1%8C%EF%BC%89Blocked%EF%BC%88%E8%A2%AB%E9%98%BB%E5%A1%9E%EF%BC%89Waiting%EF%BC%88%E7%AD%89%E5%BE%85%EF%BC%89Timed%20Waiting%EF%BC%88%E8%AE%A1%E6%97%B6%E7%AD%89%E5%BE%85%EF%BC%89Terminated%EF%BC%88%E8%A2%AB%E7%BB%88%E6%AD%A2%EF%BC%89%E5%9C%A8%E6%88%91%E4%BB%AC%E7%A8%8B%E5%BA%8F%E7%BC%96%E7%A0%81%E4%B8%AD%E5%A6%82%E6%9E%9C%E6%83%B3%E8%A6%81%E7%A1%AE%E5%AE%9A%EE%80%80%E7%BA%BF%E7%A8%8B%EE%80%81%E5%BD%93%E5%89%8D%E7%9A%84%E7%8A%B6%E2%80%A6详细可以参考上面这位大佬👆:

以下为个人理解以及归纳:

  • 创建(New):

  • 就是刚使用new方法,new出来的线程;  

 比如刚开始的 new Thread(); 

  • 就绪(可运行):就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行;

被调用start()方法后, 进入到Runnable();

  • 运行(Runnable)

  • 当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能;

  • 等待(Waiting):

 Waiting 状态的进入有三种情况,如上图中所示,分别为:

  • 当线程中调用了没有设置 Timeout 参数的 Object.wait() 方法
  • 当线程调用了没有设置 Timeout 参数的 Thread.join() 方法
  • 当线程调用了 LockSupport.park() 方法

进入等待状态后的线程无法自己主动的进入到运行状态,它必须借助另外一个线程将它唤醒。

比如A线程进入waiting状态,不能主动地进入到运行状态,必须要借助B线程来将A线程唤醒,否则A不能运行。

  • 阻塞(Blocked):

  • 在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态。

  • 当线程进入到 synchronized 代码块中未能获得相应的 monitor 锁,则会由运行状态→等待状态。当线程获得 monitor 锁,此时线程就会进入 Runnable 状态中参与 CPU 资源的抢夺。

        等待与阻塞的区别:比如吃饭时,在排队的是“阻塞”,前面有人,但会轮到它;而根本没有排队的是“等待”,就算有饭菜、前面没有人排队它也打不到。

  • 超时等待(Timed Waiting):

与sleep很像,一旦等待时间到了,它是能够进入运行状态的。或者被 notify(),提前唤醒。

  • 销毁(Terminated)

  • 如果线程正常执行完毕后或线程被提前强制性的终止或出现异常导致结束,那么线程就要被销毁,释放资源,即:

  • run() 方法执行完毕,线程正常退出。
  • 出现一个没有捕获的异常,终止了 run() 方法,最终导致意外终止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值