Java多线程:线程的生命周期 又称 “线程的状态图” 的详细讲解

本文详细讲解了Java多线程中的线程生命周期,包括新建、就绪、运行、阻塞和死亡这五个状态,以及状态间的转换。还提到了Object类的wait(),notify()方法和synchronized关键字在多线程中的作用。
摘要由CSDN通过智能技术生成

Java多线程:线程的生命周期 又称 “线程的状态图” 的详细讲解

在这里插入图片描述


每博一文案

《杀死一只知更鸟》中有这样一段话:“你永远不可能真正地了解一个人,除非你穿上他的鞋子走来走去,站在他的角度思考问题。可真当你走过他的路时,你连路过都觉得难过。”
世上没有真正的感同身受,也永远不会有一模一样的境遇。很多时候,你以为看到了全貌,但其实只有冰山一角。永远不要凭着一点蛛丝马迹,就随意评判别人的人生。在你看不到的角落里,多的是你不知道的事。不知别人的苦,就别劝人大度;没有经历过他人的难,就不要肆意嘲讽。
【未经他人事,莫论他人非;未经他人苦,莫劝他人善。】


多线程的生命周期过程

多线程是Java中不可避免的一个重要主体。从本章开始,我们将展开对多线程的学习。接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), notify()等接口;Thread类中的接口;synchronized关键字。

注:JUC包是指,Java.util.concurrent包,它是由Java大师Doug Lea完成并在JDK1.5版本添加到Java中的。

如下是简单线程状态图:

这里写图片描述

在这里插入图片描述


线程共包括以下5种状态

  1. 新建状态(new): 线程对象被创建后,就进入了新建状态,如 Thread thread = new Thread();这时候的线程还无法获取 cpu时间片(cpu执行权)
  2. 就绪状态(Runnable): 也被称为 ”可执行状态“。线程对象被创建后,其他线程调用了该对象的 start() 方法,从而来启动该线程,进入就绪状 如 : thread.start() 。处于就绪状态的线程,随时可以被CPU调度执行,一旦就绪状态的线程获取到 cpu时间片(cpu执行权) 就进入了 运行状态
  3. 运行状态(Running): 就绪状态的线程获取到了 CPU时间片(cpu执行权) 就可以执行了,需要注意的是:线程只能从就绪状态进入到运行状态。
  4. 阻塞状态(Blocked): 阻塞状态时线程,因为某种原因放弃了 CPU的使用权,暂时停止了运行。当阻塞状态结束了,就会进入到就绪状态(重新获取cpu时间片(cpu执行权)) ,才有机会转到运行状态,完成因阻塞时中断的程序的位置继续执行。阻塞的情况分为三种:
    1. 等待阻塞 :通过调用线程的 wait() 方法,让线程等待某工作的完成。等待被 notify(),notifyAll()方法唤醒,结束等待阻塞。
    2. 同步阻塞: 线程在获取 synchronized 同步锁失败(因为锁被其它线程所占用了),它会进入同步阻塞状态,等待对方的锁的释放,获取到同步锁,结束同步阻塞。
    3. 其他阻塞: 通过调用线程的 sleep()join() 或发出了的 I/O 请求时,线程会进入到阻塞状态。当 sleep()状态结束/超时,join()等待线程终止或超时,结束,或者 I/O处理完毕时,线程重新转入就绪状态。
  5. 死亡状态(Dead): 线程执行完了,或者因异常退出了,或者Error 错误终止了,或 run()方法结束了,该线程结束生命周期,所有的线程的最后都是 死亡状态,不是一个线程一直执行下去的

这5种状态涉及到的内容包括Object类, Thread和synchronized关键字
Object类:定义了wait(), notify(), notifyAll()等休眠/唤醒函数。
Thread类:定义了一些列的线程操作函数。例如:sleep()休眠函数, interrupt()中断函数, getName()获取线程名称等。
synchronized:是关键字;它区分为synchronized代码块和synchronized方法。synchronized的作用是让线程获取对象的同步锁。
关于其中状态转换方法的使用,大家可以移步至

最后:

限于自身水平,其中存在的错误,希望大家,给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见 !!!


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值