前言
线程状态(Thread.State) getState,获取当前线程状态
1.New
线程还没创建出来,只是有个Thread对象
public static void main(String[] args) {
Thread t=new Thread(()->{
});
System.out.println(t.getState());//new
}
2.TERMINATED
系统中的线程已经执行完了,Thread对象还在(类比工作已经全部完成)
public static void main(String[] args) throws InterruptedException {
Thread t=new Thread(()->{
System.out.println("hahaha");
});
t.start();
t.join();
System.out.println(t.getState());//TERMINATED
}
可以看到,此时的线程t以及执行完毕,再执行主线程中的t.getState,得到TERMINATED,
3.RUNNABLE
就绪状态(可以分为两种)
第一种,线程正在CPU上运行;
第二种,以及准备好随时去CPU上运行.
public static void main(String[] args) throws InterruptedException {
Thread t=new Thread(()->{
System.out.println("hahaha");
});
t.start();
System.out.println(t.getState());
}
4.TIME_WARNING
一个线程在一个特定的等待时间内等待另一个线程完成一个动作.
就好比你跟朋友越好了周六下午一起看电影,当你打电话给他时,他告诉你他正在化妆,让你在老地方等她半个小时.电影快开始了,但她仍然没有出现.于是你就自己去看电影了.
5.BLOCKED
这种状态是指一个阻塞线程在等待锁(表示等待锁出现的状态)
就好比你前一天约好了朋友一起出去玩,而早上出门的时候,发现电动车被老妈骑走了,而家里有且只有唯一的一辆电动车.此时电动车就是锁,
public static void main(String[] args) throws InterruptedException {
final Object object = new Object();
Thread t1=new Thread(()->{
synchronized (object){
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
t1.start();
Thread t2=new Thread(()->{
synchronized (object) {
System.out.println("xixixi");
});
t2.start();
System.out.println(t1.getState());
System.out.println(t2.getState());
}
6.WAITING
表示wait状态出现的状态
将上述代码中的t1线程的 Thread.sleep()改成object.wait(),结果如下: