Java多线程生命周期

新生状态(New):

用new关键字建立一个线程对象后,该线程对象就处于新生状态。

处于新生状态的线程有自己的内存空间,通过调用start进入就绪状态,但该线程并未真正进入运行状态。

注意:只能对处于新建状态的线程调用start()方法,否则将引发IllegalThreadStateException异常

 

就绪状态(Runnable):

处于就绪状态线程具备了运行条件,但还没分配到CPU,处于线程就绪队列,等待系统为其分配CPU

当系统选定一个等待执行的线程后,它就会从就绪状态进入执行状态,该动作称之为“cpu调度”。

就绪状态相当于"等待执行"

 

运行状态(Running):

在运行状态的线程执行自己的run方法中代码,直到等待某资源而阻塞或完成任务而死亡。

如果在给定的时间片内没有执行结束,就会被系统给换下来回到等待执行状态。

如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态,如果计算机只有一个CPU,那么在任何时刻只有一个线程处于运行状态。当然,在一个多处理器的机器上,将会有多个线程并行执行;当线程数大于处理器数时,依然会存在多个线程在同一个CPU上轮换的现象。

 

阻塞状态(Blocked):

处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进入阻塞状态。

在阻塞状态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待,被系统选中后从原来 停止的位置开始继续运行。

当发生如下情况时,线程将会进入阻塞状态。

  • 线程调用slecp()方法主动放弃所占用的处理器资源。
  • 线程调用了一个阻塞式IO方法,在该方法返回之前,该线程被阻塞。
  • 线程试图获得一个同步监视器,但该同步监视器正被其他线程所持有。关于同步监视器的知识、后面将有更深入的介绍。
  • 线程在等待某个通知(notify)。
  • 程序调用了线程的suspend()方法将该线程挂起。但这个方法容易导致死锁,所以应该尽量避免使用该方法。

 

死亡状态(Dead):

死亡状态是线程生命周期中的最后一个阶段。

线程死亡的原因有三个。

一个是正常运行的线程完成了它的全部工作(run()或call()方法执行完成,线程正常结束);

二是线程被强制性地终止,如通过执行stop方法来终止一个线程【容易导致死锁,不推荐使用】,

三是线程抛出未捕获的异常

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈小哥cw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值