Java线程的生命周期

 线程生命周期状态图

 新建状态(NEW)

当程序 使用new关键字创建一个线程之后 ,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值,它将保持这个状态直到程序调用它的start()方法。

 就绪状态(RUNNABLE)

当线程对象 调用了start()方法之后 ,该线程处于就绪状态。JVM会为其创建方法调用栈和程序计数器,等待调度器调度运行。

 运行状态(RUNNING)

如果 处于就 绪状态 的线程获得了CPU,开始执行 run()方法, 则该线程转为 运行态 。线程执行期间可能会在 就绪态运行态之间来回切换,当cpu分配的时间片用完或线程执行yield()方法主动放弃时间片,线程由 运行态转为 就绪态,重新等待调度器的调度。

阻塞状态(BLOCKED)

阻塞状态是指线程因为某种原因放弃了cpu使用权,让出了cpu时间片,暂时停止运行。直到线程进入 就绪态 ,才有机会再次获得cpu时间片转到 运行态 。阻塞的情况分三种:
等待阻塞
运行态 的线程执行wait()方法,JVM 会把该线程放入等待队列中。
同步阻塞:
运行态 的线程在获取对象的同步锁时,若该 同步锁被别的线程占用, 则JVM会把该线 程放入锁池(lock pool)中。
其他阻塞:
运行态 的线程执行sleep()或 join()方法,或者发出了 I/O 请求时,JVM 会把该线程置为 阻塞态 。当sleep()状态超时、join()等待线程终止或者超时、或者 I/O 处理完毕时,线程重新转为 就绪态

线程死亡(DEAD)

线程会以下面三种方式结束,结束后就是死亡状态。
正常结束
run()或 call()方法执行完成,线程正常结束。
异常结束
线程抛出一个未捕获的 Exception 或 Error。
调用 stop
直接调用该线程的 stop()方法来结束该线程,该方法容易导致死锁 ,不推荐使用。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值