线程状态的实验

105 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

本篇文章检验一下官方说的话到底对不对,我们可以按照它说的写代码进行验证,show me the code。

New、RUNNABLE实验

这两个比较简单,new是在执行start方法之前的状态,RUNNABLE是执行start方法之后的状态,所以代码如下:

image.png

执行结果如下:

image.png

我们可以看到java的run方法执行中也是RUNNABLE状态。

BLOCKED

我们测试线程在锁中的状态代码:

image.png

执行结果如下:

image.png

不是说进入同步方法之前就是阻塞?看来得再搞一个线程抢锁才行。

改造之后代码如下,执行run方法的时候就让线程休眠,另一个肯定是处于阻塞状态 image.png

执行结果如下:

image.png

WAITING

wait测试代码如下: image.png

测试结果如下:

image.png

经分析可能枪锁需要时间,因此我们先给它睡眠1秒。

加上睡眠效果:

image.png

执行结果如下,ok符合预期: image.png

TIMED_WAITING

有时间的等待测试代码如下: image.png

执行结果符合预期,如下: image.png

TERMINATED

线程结束状态,这个就非常好测试了,执行方法,然后结束。

测试代码如下,睡眠一秒,让run方法跑完: image.png

测试结果如下,符合预期:

image.png