线程的5种状态

最近我学习了线程从创建并启动到消亡共经历了5种状态:新建、就绪、运行、阻塞和死亡:
1、new新建态(初始态): new Thread(…)
2、就绪态(可运行态): 线程初始化后,调用start方法,只能针对新建态线程对象调用start方法,否则出现异常illegalThreadStateException
3、执行态(运行态):就绪态获取了CPU,执行线程run方法。注意有多CPU则会有多个线程并行执行。目前采用的是基于时间片轮转法的抢占式调度策略,在选择可以运行线程时会考虑线程的优先级。
4、运行态的线程中可以调用yield方法使运行态的线程转入就绪态,重新竞争CPU资源
5、阻塞态:由于某种原因使线程对象放弃CPU使用权,临时停止运行,直到线程重新进入就绪态,才有机会执行。阻塞可以分为3种:1、等待阻塞:执行的线程执行了wait方法(Object类定义的),JVM就会将线程放入到等待队列中,直到调用notify或者notifyAll进行唤醒,重新申请锁进入锁池中。2、同步阻塞:执行线程在获取对象的同步锁时,如果锁已经被其它线程占用,则JVM将线程放入到锁池中。3、其它阻塞:执行执行sleep或者join方法,或者发出IO请求时。JVM会将线程对象置为阻塞状态。当sleep状态超时、join方法等待的线程终止或者超时、或者IO处理完毕,线程再次转入就绪态。
6、死亡态(终止态),程序运行完成或者因为异常退出run方法,该线程结束生命周期。直接调用stop方法也可以结束线程,但是这个方法容易导致数据不一致的问题,所以通常不建议使用。主线程main方法结束时其它线程不受影响。注意:不要试图针对一个死亡态的线程对象调用start方法重新启动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值