图解并发系列-线程的生命周期

线程的生命周期

一个线程从创建,到最后的消亡,是需要经历多种不同的状态,而这些不同的线程状态,从开始到结束也构成了线程生命周期的不同阶段;线程的生命周期如图:

图解高并发系列-线程的生命周期

new新建状态:

使用new创一个线程对象,仅在堆中给它分配内存空间,在调用start方法之前的线程所处的那个状态;线程是没有启动,只是创建了一个线程对象放在堆中而已;譬如:

Thread t=new Thread(); //此时t属于新建状态

当新建状态下的线程对象调用了start方法,该线程对象就从新建状态进入可运行状态(runnable); 线程对象的start方法只能调用一次,多次调用会发生IllegalThreadStateException;

runnable可运行状态

包括两个:运行状态和就绪状态;

  • 就绪状态:线程对象调用start方法后,就等JVM的调度,但是此时线程还未开始运行;
  • 运行状态:线程对象已经获得JVM调度,就处在运行了;如果存在多个CPU,那就允许多个线程并行运行; q

    blocked阻塞状态:

    处于运行中的线程因为某些原因要放弃CPU时间片,暂时停止运行,会进入阻塞状态;此时JVM不会给线程分配CPU时间片,直到线程重新进入就绪状态(ready),才可能转到运行状态;

阻塞状态只能先进入就绪,进而由操作系统转到运行,不能直接进入运行状态;发生阻塞状态的就产生了几种情况:

1 当A线程处于运行,它试图获取同步锁时,但同步锁却被B线程获得,此时JVM会把A线程存到共享资源的对象等待池里面,A线程进入阻塞;
2 当线程处于运行状态,它会发出了IO请求,这时候线程会进入阻塞状态;
还有:
3 调用sleep()方法使线程进入休眠;
4 调用suspend()方法使线程进入挂起时;
5 调用wait()方法,进入等待时;

waiting等待状态

运行的线程会调用wait方法(是没有参数的wait方法),然后JVM会把该线程存到共享资源的对象等待池,线程就进入等待状态;处于该状态中的线程只会被其他线程唤醒的;

timed waiting计时等待状态:

如果运行中的线程调用带参的wait方法或者sleep方法,那么该线程是不会释放同步锁或者同步监听器的,以下两种都会进入计时等待:

  • 第一个:如果是运行中的线程,调用这个wait(long time)方法,JVM会把当前线程存到共享资源对象等待池中,那么这个线程也会进入该状态;

  • 第二个:如果当前线程执行sleep(long time)方法,也是一样的;

    terminated终止状态

    也可叫死亡状态,它的生命走到了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

龙哥手记

非常感谢你的赞赏,一起加油整起

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

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

打赏作者

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

抵扣说明:

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

余额充值