【并发篇】01 java中的线程状态

Java线程有六个状态,从新建到可运行,再到终结。可运行状态的线程有机会获取CPU资源。阻塞状态是因争夺锁失败,等待被唤醒或重新竞争。等待状态线程需被notify()唤醒或等待时间到。有时限的等待如sleep()结束后线程恢复。在这三种状态下,CPU不会执行这些线程的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Java线程分为6种状态:

(1)新建NEW:用new关键字创建的线程就是新建状态,这时候还没有和系统底层真正的线程关联起来,还仅仅只是一个java对象,所以这个时候这个线程不会被系统分配给cpu。

(2)可运行RUNNABLE:当调用了线程的start()后,线程开始运行,这时候就与真正的线程关联起来了,就会分配给它cpu资源。只有可运行状态的线程才会交给cpu执行,其他的都不会。

(3)终结TERMINATED:当线程运行结束之后就是终结状态,系统底层和它关联的线程就会得到释放。

        新建到可运行,可运行到终结,这两个过程都是不可逆的。

(4)阻塞BLOCKED:当可运行线程之间争取锁失败后就会变成阻塞状态。持锁线程释放锁之后就会唤醒阻塞的线程,然后开始进行下一轮竞争锁的动作。竞争到锁之后就由阻塞状态变为可运行状态。竞争失败那就继续阻塞状态。

(5)等待WAITING:一个线程获得了锁,但还缺少运行的必要条件时就会调用wait()进入等待状态。但不会长时间占着锁,那就会释放锁给其他线程。那怎样才能由waiting状态转为可运行呢?等满足了缺少的条件后,由另外一个线程调用notify()唤醒该线程;唤醒之后还要重新去争抢锁。抢到就会进入可运行状态。

(6)有时限的等待TIMED_WAITING:有两种情况,①调用带参数的wait方法,指定的时间用完,即使没有线程来唤醒,该线程也会自己醒来。或者其他线程调用notify方法也会醒来。醒来就会去争抢锁,抢到就进入可运行状态。②无论什么时候,当你调用线程的sleep()时,线程会进入等待状态。sleep的时间到了就会恢复为可运行状态。这种等待和锁啊资源条件啊什么没有关系。就是你让线程等,它就必须得等。

处在456这三种状态中,cpu不会执行其代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值