线程的状态
创始人
2024-01-21 06:22:03

Java中线程的状态是通过枚举类型Thread.State表示的 ,通过打印这些枚举类型,就可以知道java中线程的状态有哪些

public class ThreadState {public static void main(String[] args) {for (Thread.State state : Thread.State.values()) {System.out.println(state);}}
}

在这里插入图片描述

线程实例通过getState()方法可以知道当前线程所处的状态

NEW状态

public class Demo14 {public static void main(String[] args) {Thread t = new Thread(()->{System.out.println("hello thread");});//通过这个方法获取指定线程的状态,t调用的就获取t的状态System.out.println(t.getState());t.start();}
}

在这里插入图片描述
线程对象在调用start()方法之前调用getState()方法,此时的状态就是NEW状态。
对象创建好了,但是系统里面还没有对应的线程,也就相当于任务分配了,但是还没去执行

TERMINATED状态

public class Demo14 {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(()->{System.out.println("hello thread");});t.start();Thread.sleep(1000);System.out.println(t.getState());}
}

在这里插入图片描述

操作系统中的线程已经执行完毕,销毁了,但是Thread对象还在,此时就是TERMINATED状态

NEW状态和TERMINATED状态是Java内部定义的状态,和操作系统中的线程的PCB(线程状态在PCB中存放)没啥关系

RUNNABLE状态

public class Demo14 {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(()->{while (true){}});t.start();Thread.sleep(1000);System.out.println(t.getState());}
}

在这里插入图片描述

处于这个状态的线程,PCB就会被放到就绪队列中,随时都可以被CPU调度。如果代码中没有进行sleep,也没有进行其他的导致阻塞的操作,代码大概率就是处在RUNNABLE状态

TIMED_ WAITING状态(阻塞状态之一)

public class Demo14 {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(()->{while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t.start();Thread.sleep(1000);System.out.println(t.getState());}
}

代码中调用了sleep,join(超时时间),就会进入该状态,表示当前线程在一定时间内,是阻塞状态,一定时间之后,阻塞状态解除

BLOCKED状态(阻塞状态之一)

public class Demo14 {private static Object object = new Object();public static void main(String[] args) throws InterruptedException {synchronized (object){Thread t = new Thread(()->{synchronized (object) {System.out.println("hello,thread");}});t.start();Thread.sleep(1000);System.out.println(t.getState());}}
}

在这里插入图片描述

当线程正在等待锁时,就会处于BLOCKED状态

WAITING状态(阻塞状态之一)

public class Demo14 {public static void main(String[] args) throws InterruptedException {Object object = new Object();Thread t = new Thread(()->{synchronized (object){System.out.println("synchronized之前");try {object.wait();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("synchronized之后");}});t.start();Thread.sleep(1000);System.out.println(t.getState());}

在这里插入图片描述

当线程正在等待其他线程唤醒,就会处在WAITING状态

为什么要将阻塞状态分得这么细?

这是非常有好处的!因为在开发过程中经常会遇到程序"卡死"的情况,"卡死"就是一些关键的线程阻塞了,在分析"卡死"原因的时候,第一步就可以先看看当前程序中的各个关键线程所处的状态,通过分析线程所处的状态就能知道程序"开始"的原因

线程状态转换图

在这里插入图片描述

相关内容

热门资讯

长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
不用扬鞭自奋蹄 乘势而上千帆竞... 思明区正全力向“两个进位”目标发起冲刺,努力为建设高素质高颜值现代化国际化的厦门作出“思明贡献”。(...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
好听的民谣歌曲 2021最火的... #我的年度歌单#在2021年里听过很多民谣,但是最能触及心中温柔的还是下面的几首。不听民谣的理由有很...