线程生命周期

  大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为优快云博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理解,而且能够帮助新手快速入门。

  本文主要介绍了线程生命周期,希望能对学习线程的同学们有所帮助。

1. 综述

一个jar包可以叫做程序,当在命令行输入java -jar xxx.jar时,运行了程序,启动了进程。一个java程序一般来讲至少存在三个线程:main()主线程,gc()垃圾回收线程,异常处理线程。在java中public static void main()里的代码被称为主线程代码,主线程代码里还可以显性(开发人员写代码的方式)创建多个子线程以及孙线程,子线程/孙线程发生异常不一定会影响主线程。垃圾回收线程、异常处理线程不在主线程下显性写明,是由系统/Java虚拟机(具体是什么不确定,但肯定不是开发人员)帮我们起的,一旦发生异常都会影响主线程。

  一般情况下,即不做特别声明,父线程与子线程相互不影响,即子线程结束,父线程不一定结束;父线程结束,子线程不一定结束;父线程异常,子线程不一定异常;子线程异常,父线程不一定异常。但当我们设置守护线程等特殊操作时,父线程与子线程就会发生相互影响。具体后续会一一讲解

 一般情况下,多个子线程之间也相互不影响,但设置了线程锁,进行线程通信时有可能会发生影响,后续详解。

2. 线程的生命周期

  • 无论是主线程,还是子线程,抑或是异常处理线程、垃圾回收线程都有生命周期,具体如下:
    • 新建:创建一个线程的对象,新生的线程对象处于新建状态
    • 准备就绪:新建状态的线程对象调用方法(java是start方法),将进入线程队列等待CPU时间片,此时它已经具备了运行的条件,只是还没分配到CPU资源
    • 运行:当就绪的线程被调度且获得CPU资源时,进入运行状态(系统自动决定cpu分配,并执行获得cpu执行权的线程)。
    • 阻塞:在某种特殊情况下,如被人挂起或执行输入输出操作时,让出CPU并临时中断自己的执行,进入阻塞状态
    • 死亡:线程完成了它的全部工作或线程被提前强制终止或出现异常导致。
      在这里插入图片描述

线程的生命周期共有五种状态:新建、准备就绪、运行、阻塞、死亡

线程新建后可以切换至准备就绪状态;准备就绪状态可以切换至运行状态;运行状态可以切换至准备就绪状态或阻塞状态或死亡状态;

从运行状态切换到死亡状态,线程结束

从运行状态切换至准备就绪状态,可重新从准备就绪状态进行再次切换

从运行状态切换至阻塞状态,阻塞状态可切换至准备就绪状态,然后重新从准备就绪状态进行下一次切换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的喵喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值