线程的5种状态及其之间的切换

参考书籍:java多线程编程核心技术

如上图所示:

我们可以清楚的看到线程的几种状态

1.新建:使用NEW关键字来创建线程。

2.可运行:当前线程调用start()方法,使线程处于Runnable 状态,等待获取CPU。

3.运行中:如果线程抢到了CPU资源,这时的线程处于Running状态,Runnable和Running是可以相互切换的,比如,其他优先级较高线程抢占CPU资源,这时候线程就会变为Runnable状态。
进入Runnable状态大体分为5种:

  • 线程调用sleep()方法经过的时间超过了指定的时间。
  • 线程正在等待某个通知,其他线程发出了通知。
  • 处于挂起的线程调用resume()方法。
  • 线程调用的阻塞IO已返回,阻塞方法执行完毕。
  • 线程成功的获取到了同步监视器。

4.阻塞:出现Blocked的情况大概分为5种

  • 线程调用sleep()方法,主动放弃占用的CPU资源。
  • 线程调用wait()方法,等待某个通知。
  • 线程调用suspend()方法将线程挂起,容易导致死锁,尽量避免使用此方法。
  • 线程调用阻塞式IO方法,在方法返回前,线程被阻塞。
  • 线程试图获得一个同步监视器,但该同步监视器被其他线程所持有。

5.死亡:run()方法运行结束后进入销毁阶段,整个线程执行完毕。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值