线程有五大状态:新生 就绪 运行 阻塞 死亡
大家可以把线程看作nba比赛,每个线程代表一个nba球员,新生状态表示这个球员进入首发球员,就绪状态表示球员入场了,运行状态假设一个球员带球进攻,这个带球就是这个线程获得cpu的调度,带球进攻就是运行状态,在带球进攻时受到对方球员的侵犯,倒在了地上,我们看到阻塞状态,然后爬起来不可能立马带球跑,而是重新进入就绪状态,如果这个球员受伤了,或者身体不行了状态不佳,就会被教练替换下场,这就是死亡状态 。
在强调几点 第一是进入阻塞状态后不能立马回到运行状态,而是要回到就绪状态;第二个是进入死亡状态,就重新开启,就像人死了不能复活。如果开启就又是一个新线程,而不是以前的那个线程。
当我创建一线程就进入到了新生状态,当进入了新生状态后,每个线程都有自己的内存空间,也是工作空间。当调用start方法线程就进入了就绪状态,进入就绪状态不代表被立即调度到了,而是要等cpu的调度,就绪状态只代表这个线程有被cpu调度的条件,还没有被分配到cpu ,处于线程的就绪队列中,等待系统为其分配cpu,一般有四种原因进入就绪状态:第一start方法,
第二阻塞状态解除进入就绪状态,
第三调用yield方法让出cpu的调度,避免一个线程占用资源过多中断一下,然后重新进入就绪,
第四种jvm将cpu从本地线程切换到此线程,此线程就进入就绪状态
当这个线程被cpu调度到了才进入运行状态,线程才真正执行线程的代码块。这个运行状态只会从就绪状态被cpu调度到了才会进入运行状态,不会从阻塞状态回到运行状态,这个阻塞状态也有四种原因导致它的发生
第一种 :sleep延时,表示抱着资源睡觉,不给别用,等待多少秒
第二种: wait 就好像红绿灯,自己不占用资源,别人用
第三种:join 插队
第四种:io操作 read write 也会进入阻塞
进入死亡状态原因一是:当这个线程走完了结束了进入死亡状态;二是stop、destroy方法,这两方法已经过时,不推荐使用。



被折叠的 条评论
为什么被折叠?



