java029:线程的四种状态(准备,运行,阻塞,死亡)和线程的调度

一,线程的四种状态:
准备状态:就是新建状态new的时候
运行状态:处于运行状态的线程具备抢占cpu的资格,至于能不能抢到,能不能正在运行还不一定!
阻塞状态:该状态的线程不具备抢占cpu的资格
死亡状态
1:自然死亡就是代码从头到位全部执行完毕
2:强制死亡就是调用了stop方法
在这里插入图片描述
注意:在准备和运行期间,可以设置线程的优先级

在这里插入图片描述
需要注意:强制死亡太二了,太暴力了,说死就死,没有一点征兆。也就是强制死亡执行后,不关你的数据完整输出没,就直接死亡,导致数据会不安全,就比如你在给对方转账,你转出去了,然后强制死亡,后面的数据不再执行,导致对方收不到钱。
如下结果,ABCD还没有输完,只输到A,就强制死亡,数据不安全。
在这里插入图片描述
它和控制台的停止程序不一样,停止程序是输到哪不管,直接停止。就比如C输到一半,然后直接停止
在这里插入图片描述
所以stop已经过时了,以后写程序不能再用它,学它是因为前人写程序用了它
替代方案:Thread.interrupted()是否被打扰,默认返回false。
t1.interrupt();打扰一下,表示下次Thread.interrupted()就返回true。
在这里插入图片描述
在这种情况下,即使程序强制死亡,死亡前也会输出完整的数据,保证了数据的安全性
阻塞状态:sleep(3000)睡3秒后抢占再线程
在这里插入图片描述
结果:3秒后输出1到10,在3秒内它处于阻塞状态
二,线程的调度:(设置线程的优先级)
设置线程优先级的时候,MAX_PRIORITY的优先级为10,MIN_PRIORITY的优先级为1,如果不设置,默认都是5。

Thread.currentThread().getName()//获取线程的名字
Thread t1=new Thread(a,"我的优先级高");//把线程名字改成“我的优先级高”

在这里插入图片描述
需要注意:优先级高并不是说会优先输出,而是抢到线程的概率大而已。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44699728/article/details/89883144