栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

线程的状态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程的状态

线程的状态
  • 一、线程有哪些状态
    • 1.1掌握java的线程状态
    • 1.2掌握java线程状态之间的切换
    • 1.3辨析两种说法,六种状态vs五种状态

一、线程有哪些状态 1.1掌握java的线程状态
  • java线程分为六种状态
  • NEW-新建
    • 当一个线程对象被创建,但还未调用 start 方法时处于新建状态
    • 此时未与操作系统底层线程关联
  • RUNNABLE-可运行
    • 调用了 start 方法,就会由新建进入可运行
    • 此时与底层线程关联,由操作系统调度执行
  • BLOCKED-阻塞
    • 当获取锁失败后,由可运行进入 Monitor 的阻塞队列阻塞,此时不占用 cpu 时间
    • 当持锁线程释放锁时,会按照一定规则唤醒阻塞队列中的阻塞线程,唤醒后的线程进入可运行状态
  • WAITING-等待
    • 当获取锁成功后,但由于条件不满足,调用了 wait() 方法,此时从可运行状态释放锁进入 Monitor 等待集合等待,同样不占用 cpu 时间
    • 当其它持锁线程调用 notify() 或 notifyAll() 方法,会按照一定规则唤醒等待集合中的等待线程,恢复为可运行状态
  • TIME_WAITING-等待(有时限)
    • 当获取锁成功后,但由于条件不满足,调用了 wait(long) 方法,此时从可运行状态释放锁进入 Monitor 等待集合进行有时限等待,同样不占用 cpu 时间
    • 当其它持锁线程调用 notify() 或 notifyAll() 方法,会按照一定规则唤醒等待集合中的有时限等待线程,恢复为可运行状态,并重新去竞争锁
    • 如果等待超时,也会从有时限等待状态恢复为可运行状态,并重新去竞争锁
    • 还有一种情况是调用 sleep(long) 方法也会从可运行状态进入有时限等待状态,但与 Monitor 无关,不需要主动唤醒,超时时间到自然恢复为可运行状态
  • TERMINATED-终结
    • 线程内代码已经执行完毕,由可运行进入终结
        • 此时会取消与底层线程关联
  • 阻塞
1.2掌握java线程状态之间的切换

NEW–>RUNNABLE:调用 start 方法




RUNNABLE->TERMINATED:代码执行完毕

1.3辨析两种说法,六种状态vs五种状态
  • 操作系统层面的五种状态
    • 分到CPU时间的 :运行
    • 可以分到CPU时间的 :就绪
    • 分不到CPU时间的:阻塞

      JAVA中将就绪跟运行都叫左RUNNABLE,JAVA检测不到阻塞I/O所以没有
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号