Java基础之多线程的状态

笔记
1、多线程一共有四种状态,运行状态,死亡状态,冻结状态和临时堵塞状态。我们先来理解前三种状态(运行状态,死亡状态,冻结状态)。其过程为,一个线程先是被创建,然后通过start()方法进入运行状态,这时候,这个线程有两个选择,一个是进入死亡状态,一个是进入冻结状态。进入死亡状态的方法有两种,一种是等着run()方法结束,这个时候,这个线程就进入了死亡状态,当然,还有一种进入死亡状态的方法, 就是直接执行stop()方法,这样子可以直接让线程进入死亡状态,而不用等着run()方法里面的代码结束掉。进入冻结状态,也是有两种方法,一种是通过sleep(time)方法,这个方法可以让线程休眠time时间,时间到了,这个线程就会重新进入到运行状态。还有一种进入冻结状态的方法是通过wait()方法,如果是通过这个方法进入的冻结状态,那就不可能自动醒过来了,必须通过一个notify()方法来唤醒这个线程。通俗的说,假如把线程比作一场打架的话,死亡就是线程被打死了,而通过sleep(time)方法进入休眠的就是装死,时间到了,会自动醒过来,而通过wait()方法进入休眠状态的线程就是被打成植物人了,不会自动醒过来,必须通过一些手段(notify())才能重新醒过来。
2、接下来,我们分析下临时堵塞状态,这个状态理解起来比较难。理解这个之前,我们先来了解两个概念,一个是CPU的执行资格,这个指的是可以被CPU处理,在处理队列中排队。另一个概念是CPU的执行权,这个指的是正在被CPU处理。当一个线程处于运行状态的时候,既有CPU执行资格,也有CPU执行权。那么当线程从运行状态进入到冻结状态的时候,它还有CPU执行权吗?它还有CPU执行资格吗?答案是:都没有。举个例子,我是一名老师,当前有甲乙丙丁四名同学,在等着我给他们讲解问题,当我正在跟甲同学讲题目的时候,乙同学睡着了,此时的乙同学具备执行权吗?显然是不具备的,因为我正在给甲同学讲解题目,甲同学才具备执行权。那么乙同学具备执行资格吗?这是个容易迷惑的地方,答案是,也不具备。因为,此时只有丙丁同学在等着我讲解题目,乙同学已经睡着了,也就是说我给甲同学讲解完题目之后,也许会接着个丙同学讲解题目,也许会接着跟丁同学讲解题目,但是不会跟乙同学讲解题目的,因为他睡着了,已经不具备执行资格了。
我们再来想一个问题,当我在给甲同学讲解题目的时候,乙同学在睡觉,乙同学的状态是冻结状态,但是丙丁同学没有睡觉啊,那丙丁同学的状态是啥状态呢?此时,丙丁同学所处的状态就是临时堵塞状态

图解
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

playboy-jordan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值