java线程的五个状态

新生->new
就绪->start
运行->CPU调度
结束->stop,run方法执行完
阻塞->sleep

  1. 线程分为被新生、就绪、运行、阻塞、消亡五种状态。
  2. 被new创建后需要调用start方法,等待CPU调用
  3. start后的状态态,即具有运行资格,但没有运行权的线程所处状态。当某一时间点,线程没有获得CPU的执行权,就是处于这个状态。
  4. 阻塞(blocked),即 放弃执行资格 的线程所处状态,目的是让线程暂时停止,让别的线程先运行。有两种方法可以让线程进入阻塞状态。
  • 调用sleep(time)静态方法,使线程进入冻结状态中的睡眠状态,且在time即时间到了之后,自动解除冻结状态。 这里会占用资源,抱着资源睡觉。不会释放锁。此特点对比wait的。可以模拟网络延时,倒计时。
  • 调用wait()方法,使线程进入冻结状态中的等待状态,且只有当用notify()等函数将其“唤醒”之后,才解除冻结。
  1. 解除阻塞状态之后,线程不是直接进入运行状态,因为此时不能获取到CPU的执行权。而是进入临时状态。
    直接回到等待CPU调用 还可以,调用yield()静态方法,礼让。成员方法,join()可以阻塞线程等待其他线程执行完,再开始。
  2. 消亡,即线程结束.当调用stop()方法现在已经弃用,自己增加一个标志位,提供外部方法调用。或者run方法运行结束(不要就是不要有死循环)后。线程进入消亡状态。
start()
获得执行权
run()方法结束
失去执行权
synchronized
锁可用
wait()
notify()
sleep()/join() IO流阻塞等
sleep()休眠时间到,jion联合线程执行完毕,IO流阻塞结束等
新生状态
就绪状态
运行状态
死亡状态
同步阻塞
等待阻塞
其他阻塞

进入就绪状态四种情况

  • start方法调用
  • 阻塞解除
  • yield 礼让
  • jvm切换线程

thread.state

  • NEW
    尚未启动的线程处于此状态
  • RUNABLE
    在java虚拟机中执行的线程
  • BLOCKED
    被阻塞等待监视器锁定的线程处于此状态
  • WAITING
    正在等待另一个线程执行特定动作
  • TIMED_WAITING
    正在等待另一个线程执行动作达到指定等待时间的线程
  • TERMINATED
    已退出的线程
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅墨cgz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值