Java线程的六种状态(付代码解释)

news/2025/2/4 1:07:06/

目录

一.新建状态 (New)

解释

代码

运行结果

​编辑

二.运行状态(Runnable) 

 解释

代码

运行结果

 三.等待状态(Waiting)

解释

代码

运行结果

 四.阻塞状态(Blocked)

解释

代码

运行结果

 五.计时等待状态(Timed Waiting)

解释

代码

运行结果

 六.终止状态(Terminated)

解释

代码

运行结果

状态之间的切换条件

新建状态(New):

运行状态(Runnable):

阻塞状态(Blocked):

等待状态(Waiting):

计时等待状态(Timed Waiting):

终止状态(Terminated):


Java线程一共有六种状态,分别是

新建状态(New)

运行状态(Runnable)

阻塞状态(Blocked)

等待状态(Waiting)

计时等待状态(Timed Waiting)

终止状态(Terminated)

一.新建状态 (New)

解释

线程仅仅是被创建,但未被调用的状态

代码

getState查看线程状态

public class demo14 {public static void main(String[] args) {Thread t1 = new Thread(()->{});System.out.println(t1.getState());}
}

运行结果

二.运行状态(Runnable) 

 解释

[正在运行中的]  或者  [已经能够运行]  的线程

代码

只是加了一个start调用

public class demo14 {public static void main(String[] args) {Thread t1 = new Thread(()->{});t1.start();System.out.println(t1.getState());}
}

运行结果

 三.等待状态(Waiting)

解释

正在运行中的线程被中断后,处于被通知状态的等待状态,一旦接收到通知就继续运行

代码

调用wait方法让线程处于等待状态

public class demo14 {public static void main(String[] args) throws InterruptedException {Object ob = new Object();Thread t1 = new Thread(()->{synchronized (ob){try {ob.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}}});t1.start();Thread.sleep(1000);//这里sleep是为了避免主函数运行过快,显示RunnableSystem.out.println(t1.getState());}
}

运行结果

 四.阻塞状态(Blocked)

解释

多个线程竞争同一个锁,竞争失败的线程会处于该状态

代码

此时t2和t1同时竞争名为func的枷锁方法

因为t2先获得,所以t1只能处于阻塞等待

public class demo14 {synchronized public static void func() {try {Thread.sleep(1000000);} catch (InterruptedException e) {throw new RuntimeException(e);}}public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(()->{func();});Thread t2 = new Thread(()->{func();});
//t2先获得锁,t1只能阻塞等待t2.start();t1.start();System.out.println(t2.getState());System.out.println(t1.getState());}
}

运行结果

 五.计时等待状态(Timed Waiting)

解释

和等待相似,但是区别在于限定了一个时间,如果超过时间则取消等待,继续执行

代码

public class demo14 {public static void main(String[] args) throws InterruptedException {Object ob = new Object();Thread t1 = new Thread(()->{synchronized (ob){try {ob.wait(10000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t1.start();Thread.sleep(1000);//这里sleep是为了避免主函数运行过快,显示RunnableSystem.out.println(t1.getState());}
}

运行结果

 六.终止状态(Terminated)

解释

线程运行结束,释放所有资源

代码

public class demo14 {public static void main(String[] args) throws InterruptedException {Object ob = new Object();Thread t1 = new Thread(()->{});t1.start();Thread.sleep(1000);//这里sleep是为了让线程运行完毕,避免主函数运行过快显示RunnableSystem.out.println(t1.getState());}
}

运行结果

 

状态之间的切换条件

新建状态(New):


被创建就自动进入该状态

运行状态(Runnable):


被调用(如start)后进入该状态

阻塞状态(Blocked):


竞争锁失败后进入该状态

等待状态(Waiting):


运行被中断(如wait),处于等待唤醒状态时进入该状态

计时等待状态(Timed Waiting):


如果被带有时间的wait等方式中断,进入等待唤醒状态时进入该状态

终止状态(Terminated):


全部执行完毕后,没有出错释放资源,进入该状态

 


http://www.ppmy.cn/news/504281.html

相关文章

什么是元宇宙?元宇宙由哪些关键技术、设备构成?

元宇宙近几年来火爆起来,各个行业争先恐后加入。从目前来看,元宇宙初步体现在游戏娱乐行业、社交、消费、数字孪生等方面。元宇宙近两年开始在各个行业快速崛起,但各个行业并没有一个清晰的发展方向,那么什么是元宇宙? 元宇宙到底由哪些技术和设备组成?查询了很多资…

邮件打开率低?来看看这几招提高邮件打开率!

什么是邮件打开率? 邮件打开率:简单来讲就是收件人打开的邮件数占发送邮件总数的百分比。 我们要做的就是如何吸引收件人打开邮件,那可以从以下几个方面来考虑: 1、邮件标题 邮件标题直接向收件人表达了这封邮件是关于什么的&am…

笔记本电脑禁用集显会变卡?

前因:  前些天由于win11更新出来的漏洞桌面窗口管理器内存溢出,原因因为好像集显驱动有问题,于是乎我禁用了集显,只使用独显。结果打开office会变的很卡,而且搜狗打字也会变得很卡。 原因: 搜了一圈&…

笔记本电脑无线被禁用 是哪个服务器,笔记本无线网络被禁用怎么打开?|无线网络被禁用打开方法...

使用笔记本,最方便的当然是连接无线网络来上网,而不是使用本地连接,但是有使用win7系统的用户遇到了笔记本无线网络被禁用的问题,自己又不知道怎么打开,所以PE吧就给大家带来了笔记本无线网络被禁用打开的方法。 如果只…

计算机网络点了禁用,win10电脑以太网禁用开启不了的修复办法

以太网是局域网的一种,传播距离不远,但网速很快,虽然适合现代办公。我们都知道开启以太网才能正常连接网络。有些win10纯净版的用户反映说明明网络正常,手机都可以上网,工作的电脑却无法连接网络,发现以太网…

计算机哪些服务应该被禁用,Win10必须禁用的服务有哪些?

在操作win10系统的时候,可以禁用一些服务,从而增加电脑的运行内存,提高我们电脑的运行速度。那具体有哪些是可以禁用的win10服务呢?感兴趣的小伙伴可以来看看哦。 方法如下: 1、Print Spooler:将文件加载到…

win10计算机如何禁用签名,win10系统禁用数字签名的设置方案

有关win10系统禁用数字签名的操作方法想必大家有所耳闻。但是能够对win10系统禁用数字签名进行实际操作的人却不多。其实解决win10系统禁用数字签名的问题也不是难事,小编这里提示两点:1、在电脑启动的过程中,不用等到进去输入用户登陆框&…

禁用计算机账户控制,禁用当前的账户【应对步骤】

喜欢使用电脑的小伙伴们一般都会遇到win7系统禁用当前的账户的问题,突然遇到win7系统禁用当前的账户的问题就不知道该怎么办了,其实win7系统禁用当前的账户的解决方法非常简单,按照1:按【winR】快捷键打开运行,在运行输…