调用sleep方法的时候会导致线程的状态从RUNNING变为TIME_WAITING。
本文专门写个例子验证这个情况。
只是为了验证而验证,下面的代码没有什么实战意义。
代码主要逻辑:
创建t1线程对象,sleep 2000ms,在main线程输出t1线程的状态。main线程sleep 500ms为了确保t1比main先执行。其实就是卡时间点。最开始的时候可能是RUNNABLE也可能是TIMED_WAITING,因为没有sleep,谁先谁后不确定。500ms的时候t1很可能处于TIMED_WAITING状态,2500ms的时候,很可能处于TERMINATED状态。
只要观察到变化就行。
/**
* sleep线程状态的切换
*/
public class SleepDemo1 {
public static void main(String[] args) {
Thread t1 = new Thread("A") {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t1.start();
//可能是RUNNABLE也可能是TIMED_WAITING,因为没有sleep,谁先谁后不确定
System.out.println(t1.getName()+" is "+t1.getState());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
//获取状态,main线程不一定先执行,所以先睡眠500ms,这个例子没有实战意义,只是为了证明状态确实切换了
System.out.println(t1.getName()+" is "+t1.getState());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//时间足够长,线程已经结束
System.out.println(t1.getName()+" is "+t1.getState());
}
}