线程的生命周期

本文介绍了线程的四种基本状态:新建、就绪、阻塞和死亡,并详细解释了线程如何进入阻塞状态的原因,包括调用sleep()、wait()、等待I/O完成或尝试获取已锁定的对象。

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

Thinking in java中介绍了线程状态

一个线程可以处予以下四种状态之一:
1)新建(new):当线程被创建时,它只会短暂地处于这种状态。此时它已经分配了必需的系统资源,并执行了初始化。此刻钱程已经有资格获得CPU时间了,之后调度器将把这个线程转变为可运行状态或阻塞状态。
2)就绪( Runnable ) :在这种状态下,只要调度器把时间片分配给线程,线程就可以运行。也就是说,在任意时刻,线程可以运行也可以不运行。只要调度器能分配时间片给线程,它就可以运行,这不同于死亡和阻塞状态。
3)阻塞(Blocked):线程能够运行,但有某个条件阻止它的运行。当钱程处于阻塞状态时,调度器将忽略线程,不会分配给线程任何CPU时间。直到线程重新进入了就绪状态, 它才有可能执行操作。
4)死亡(Dead):处于死亡或终止状态的线程将不再是可调度的,并且再也不会得到CPU时间,它的任务己结束,或不再是可运行的。任务死亡的通常方式是从run()方法返回,但是任务的线程还可以被中断,你将要看到这一点。


进入阻塞状态
一个任务进入阻塞状态, 可能有如下原因:
1)通过调用sleep(milliseconds)使任务进入休眠状态,在这种情况下,任务在指定的时间内不会运行。
2)你通过调用wait()使线程挂起。直到钱程得到了notify()或notifyAll()消息(或者在JavaSE5的java.util.concurrent类库中等价的signal()或signalAII()消息),线程才会进入就绪状态。
3)任务在等待某个输入输出完成。
4)任务试图在某个对象上调用其同步控制方法,但是对象锁不可用,因为另一个任务已经获取了这个锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值