Java - jvm中线程的状态以及线程状态的转移

目录

前言:操作系统线程 与 jvm线程

一、线程有哪些状态

二、线程状态的转移


前言:操作系统线程 与 jvm线程

注意:线程的整个状态其实就是线程存活的生命周期。操作系统与jvm线程都有线程状态。操作系统中的线程状态被分成了5种,而jvm中的线程状态被分成了6种。

所以我们说线程状态的种类时,一定要带上对象(操作系统/jvm),否则就不准确。

进程怎么不分对象? 嘿!因为操作系统管理多个进程,java是其中一个进程啊 ~ 所以我们常说的操作系统进程,jvm线程

我们即将讨论的jvm中的线程状态...

一、线程有哪些状态

  • NEW 新建状态

尚未启动的线程处于该状态。当创建了Thread对象但还没有调用start方法时,此时就处于该状态。

  • RUNNABLE 可工作状态

以下两种情况都叫RUNNABLE:

① 线程准备好,且已被调度到CPU执行,正在工作;

② 线程已准备好,处于就绪队列,但还未被调度到CPU上执行,即将工作。

  • BLOCKED 阻塞状态

当线程等待锁的时候就会进入BLOCKED阻塞状态

  • WAITING 阻塞状态

线程中调用了wait时进入的状态

  • TIMED_WAITING 阻塞状态

线程调用了sleep时进入的状态

  • TERMINATED 终止状态

工作完成。线程的run执行完了,但是Therad对象还在

关于wait方法,sleep方法可以参考另一篇博客:

(127条消息) Java - 使用synchronized关键字加锁_CLAN-Brave的博客-CSDN博客

(127条消息) Java - 线程的属性和方法(sleep()、interrupt()中断线程、 join()控制线程顺序)_CLAN-Brave的博客-CSDN博客_java sleep 中断

二、线程状态的转移

线程状态的主干道路其实就是新建->可运行->终止三态道路,由于某些原因线程被阻塞,从而出现枝干道路。再者由于线程被阻塞的原因和目的不同,形成了三条枝干道路。

jvm将线程中的阻塞状态细分为了三种,这三种阻塞状态都会导致PCB进入内核对应的阻塞队列。

不过三者阻塞状态被唤醒的方式不同:

  • WAITING状态的线程必须要等待别的线程唤醒
  • TIME_WAITING状态的线程在等待时间结束后,被操作系统唤醒
  • BLOCKED状态的线程等待别的线程将这个锁解除之后,由操作系统唤醒

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值