java并发(三)之线程的生命周期(状态)

java并发(三)之线程的生命周期(状态)

在这里插入图片描述

  • 线程在启动后不是一开始就处于执行状态,也不会一直处于一个状态,线程拥有一个自己的生命周期,分为五种状态,它要经过 新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5 种状态。

新建状态(New)

当创建一个线程之后,JVM为其分配内存,并初始化它的成员变量的值,当还没有调用start()方法之前,此时的线程与普通的java对象是没有差别的,等start()方法调用之后才会被当成一个线程对象处理。

就绪状态(Runnable)

这个状态线程已经处于可运行的状态,Java 虚拟机会为其创建方法调用栈和程序计数器,等待调度运行,当然想要得到CPU的使用权运行,还得看操作系统如何分配。

运行状态(Running)

当就绪态的线程获得CPU的使用权后就开始运行,会执行线程的方法体,获取结束后,CPU会剥夺资源。

阻塞状态(Blocked)

阻塞状态是因为线程因为一些其他的原因放弃了CPU的执行权。下面我们来分析三种阻塞:

  1. 等待阻塞:线程调用wait()方法,线程进入阻塞状态;
  2. 同步阻塞:线程在获取对象的同步锁时,若该同步锁被别的线程占用,线程则进入阻塞状态;
  3. 其他阻塞: 线程调用sleep(),join()方法或者出现i/o请求的时候,线程进入阻塞状态,当
    sleep()状态超时、join()等待线程终止或者超时、或者 I/O 处理完毕时,线程重新转入可运行(runnable)状态。

死亡状态(Dead)

线程会以下面三种方式结束,结束后就是死亡状态。
正常结束

  1. run()或 call()方法执行完成,线程正常结束。
    异常结束
  2. 线程抛出一个未捕获的 Exception 或 Error。
    调用 stop
  3. 直接调用该线程的 stop()方法来结束该线程—该方法通常容易导致死锁,不推荐使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值