线程有5中状态,分别是:新建(出生)、就绪、运行、阻塞和死亡。我们可以看成三个阶段,出生——生长——死亡。
就绪、运行、阻塞有各自的判定条件,我先上图,让大家看清楚流程,然后再举例子来比喻。
我们把线程比喻成古代皇帝的一个儿子(尼古拉斯.赵四),线程执行就是当上太子(有更大的权力):
当这个皇子(赵四)从娘胎里面生下来后,就代表新建线程了;
这个皇子健康成长,可以成为太子备选人,但不能行使太子权力(就绪状态,有执行的资格,没有执行权);
皇子在皇帝(就是你自己)面前表现很好,皇帝很喜欢他,让他当太子,行使太子权力(抢到CPU资源,线程运行);
当赵四当了太子后,会有一下三种可能
a.如果皇子在当太子期间(线程运行),有其他的皇子表现更好,把现在这个皇子的太子位子抢走了,那么这个皇子(赵四)会恢复到皇子身份,不在是太子(没有执行权,回到就绪阶段,准备再当太子);
b.但如果皇子在当太子期间(线程运行),被人施了魔法(sleep(),wait()方法),导致他生病了,不能当太子,身体不好,也没有当太子的资格,现在就只能身体恢复好,然后就有了当太子的资格(线程阻塞,没有执行资格和执行权,最后回到就绪阶段)。
c.当皇子把他自己的事情处理完后,线程就结束了,线程死亡。