Java线程的生命周期

1、通用的线程的生命周期,简称:五态模型:

1:初始状态  指语言层面上的创建线程,操作系统中还没有创建。

2:可运行状态 指线程可以分配CPU执行,这时线程已经在系统中创建成功。

3:运行状态 指当CPU处于空闲时会为其指定一个可运行状态的线程,并且将状态切换到运行状态。

4:休眠状态 指当运行状态的线程调用一个阻塞API或者等待某个事件时,线程状态会转换到休眠状态,同时释放CPU的使用权,休眠状态的线程永远没有机会获得CPU使用权呢,当等待的事件出现时会转换到可运行状态。

5:终止状态 指当线程执行完毕或抛异常时则会进入终止状态,即意味着线程的生命周期结束了。

 

2、Java中线程的生命周期

Java线程的生命周期分为:NEW(初始化状态)、RUNABLE(可运行状态/运行状态)、BLOCKED(阻塞状态)、WAITING(等待状态)、TIMED_WAITING(有时限的等待)、TERMINATED(终止状态)

BLOCKED(阻塞状态)、WAITING(等待状态)、TIMED_WAITING(有时限的等待)三者在操作系统层面是一种状态,为睡眠状态,Java线程处于这三种状态之一时也代表这个线程永远得不到CPU的使用权。

Java线程状态转换:

初始化 ----> 运行/可运行状态

Java中通过继承Thread或者实现Runable接口创建出来的Thread对象就是初始化状态(NEW),调用线程的start()方法即可将NEW状态转换为RUNABLE状态。

 

RUNABLE---> WAITING

Java中通过synchronized隐式锁的线程调用awit()方法,或者调用线程的join()方法,调用LockSupport.park()方法

 

RUNABLE---> TIMED_WAITING

调用转换WAITING状态带超时参数的方法即可

 

RUNABLE ----> BLOCKED

这种只有一种情况,线程等待synchronized的隐式锁,这种修饰的代码块同一时刻只能有一个线程执行,其他线程只能等待。等待的线程会从RUNABLE转换到BLOCKED状态,当等待的线程获取到锁时会从BLOCKED转换到RUNABLE状态.

 

RUNABLE --->TERMINATED

线程执行完run方法之后会自动转换到TERMINATED状态,执行run方法时抛出异常也会转换到该状态,终止线程的方法有stop()方法(不建议使用的方法)和interrupt()方法。

 

本文章参考极客时间中王宝令老师的Java并发编程实战课程,有兴趣的可以购买该课程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值