Java多线程之状态与生命周期

线程的生命周期

线程创建并启动后,不是一启动就进入执行状态,也不会一直处于执行状态。

线程启动后不可能一直霸占CPU,所以CPU会在多线程之间切换,于是线程状态也会多次在运行、阻塞之间切换

在线程的生命周期中,线程共有5种状态,在任意时刻,线程的状态只能是其中的一种

状态说明
New初始状态 —>使用new关键字,创建一个线程,但是还没有调用start方法,仅仅由JVM分配内存,并初始化成员变量
Runnable就緒状态 —> 调用start()后处于就绪状态,JVM为其创建方法调用栈和程序计数器,但线程并没有开始运行,仅表示可以运行。何时开始,取决于JVM里的线程调度器的调度
Running运行状态 —>处于就绪状态的线程,获得了CPU,开始执行run()方法,则处于运行状态
Blocked阻塞状态 —> 表示线程阻塞于锁。线程之间需要切换,时间段用完后,系统会剥夺线程占用的资源,让其他线程执行,选择哪个线程,系统会考虑线程的优先级。调用sleep(),调用阻塞式IO方法,等待同步锁,等待通知wait(),suspend(),join(),这些将使得线程进入阻塞状态
Waiting等待状态 —> 进入该状态后需要其他线程做出通知动作,也可以算是阻塞状态。需要notify()唤醒线程,使之进入就绪状态
Time_Waiting超时等状态状态 —> 该状态与WAITING不同,它是可以在指定时间内自行返回的。相当于在等待状态基础上,增加了时间的限制,超过了设定的时间限制就会返回到运行状态
Dead死亡状态 —> 线程执行完毕。run()或call()执行完成,线程抛出未捕获的Exception或Error,调用该线程的stop(),都会结束线程。

这里写图片描述
为了测试线程是否已经死亡,可以调用线程对象的isAlive()方法,若处于就绪、运行、阻塞三种状态,方法返回true;若线程处于新建、死亡状态,方法返回false。

不能对已经死亡的线程调用start()方法,重新启动,否则抛IllegalThreadStateException异常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值