携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情
本篇文章检验一下官方说的话到底对不对,我们可以按照它说的写代码进行验证,show me the code。
New、RUNNABLE实验
这两个比较简单,new是在执行start方法之前的状态,RUNNABLE是执行start方法之后的状态,所以代码如下:
执行结果如下:
我们可以看到java的run方法执行中也是RUNNABLE状态。
BLOCKED
我们测试线程在锁中的状态代码:
执行结果如下:
不是说进入同步方法之前就是阻塞?看来得再搞一个线程抢锁才行。
改造之后代码如下,执行run方法的时候就让线程休眠,另一个肯定是处于阻塞状态
执行结果如下:
WAITING
wait测试代码如下:
测试结果如下:
经分析可能枪锁需要时间,因此我们先给它睡眠1秒。
加上睡眠效果:
执行结果如下,ok符合预期:
TIMED_WAITING
有时间的等待测试代码如下:
执行结果符合预期,如下:
TERMINATED
线程结束状态,这个就非常好测试了,执行方法,然后结束。
测试代码如下,睡眠一秒,让run方法跑完:
测试结果如下,符合预期: