• 1.线程状态及其含义
  • 2.状态之间切换的条件

1.线程状态及其含义

  1. NEW(初始化): 表示创建了Thread对象,但是还没有调用start (也就是系统内核还是没有创建对应的PCB)

  2. RUNNABLE(运行): 表示可运行的.线程创建后,调用了start方法,等待CPU的调度或者正在CPU中运行.

  3. BLOCKED(阻塞): 表示该线程进入阻塞队列.

  4. WAITING(等待):该线程调用了wait()方法后进入阻塞队列,等待其他线程唤醒.

  5. TIMED_WAITING(超时等待): 表示该线程等待(阻塞)一定的时间后,自动返回(自己醒来了).

  6. TERMINATED(终止): 表示内核中的PCB已经执行完毕了,但是Tread对象还存在(依旧可以调用一些方法,但是不能使用多线程,也就无意义了).表示线程执行完毕或者run()因异常退出,该线程结束了生命周期.

  • 使用State(枚举)查看状态

  • 代码
public class ThreadDemo13 {public static void main(String[] args) {for(Thread.State state: Thread.State.values() ){System.out.println(state);}}
}

2.状态之间切换的条件

  • 观察线程状态的切换:NEW / RUNNABLE / TIMED_WAITING / TERMINATED
public class ThreadDemo14 {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(()->{for (int i = 0; i < 1000; i++) {//循环里来一个sleep  此时获取状态 是 TIMED_WAITINGtry {Thread.sleep(10);} catch (InterruptedException e) {throw new RuntimeException(e);}}});//启动前 获取到 NEWSystem.out.println("start之前:"+t.getState());//启动线程t.start();//这个循环的目的是:此时t线程在sleep中获取的状态 可能是RUNNABLE 也可能是 TIMED_WAITING//循环获取状态 总会把这两种状态都获取到  具体获取到哪个状态取决于系统调度// t线程当前运行到哪个环节了 是在执行(for循环) 还是在sleepfor (int i = 0; i < 20; i++) {System.out.println("t线程执行中状态:"+t.getState());}//让main线程等待t线程t.join();//任务结束后 获取到 TERMINATEDSystem.out.println("t线程结束后:"+t.getState());}
}

代码输出结果:

线程的状态之间转换的条件:在创建一个新线程时并没有使用该线程调用stat方法,此时线程是NEW状态,当调用了start方法,意味着线程进入就绪状态,等待系统调度,进入到CPU或者sleep完,或者正在执行任务,此时线程是RUNNABlE状态 (就绪状态),当执行任务时,遇到了sleep(),线程不会被分配CPU资源,此时线程转是TIMED_WAITING状态(阻塞/等待状态),当线程的任务(run方法)执行完毕时,此时线程是TERMINATED状态(终止),虽然这个时候线程对象还存在,但是已经没有了意义,也不能重新start启动,并且一个线程只能调用一次start.在这的终止状态表明的是该线程在系统调度中结束了,已经不再是一个线程.

Java 线程的几种状态及其切换的条件相关推荐

  1. Java线程的5种状态及切换

    ava中的线程的生命周期大体可分为5种状态. 1. 新建(NEW):新创建了一个线程对象. 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方 ...

  2. Java线程的6种状态及切换(透彻讲解)

    Java中线程的状态分为6种. 1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法. 2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running ...

  3. Java多线程学习总结(3)——Java线程的6种状态及切换

    一.线程六种状态 线程的状态在java中有明确的定义,在java.lang.Thread.State中有6种. ① New:线程被创建,未执行和运行的时候 ② Runnable:不代表线程在跑,两种: ...

  4. Java线程的5种状态及切换(透彻讲解)

    http://blog.csdn.net/pange1991/article/details/53860651 转载于:https://www.cnblogs.com/zongyl/p/8086834 ...

  5. Java 线程的6种状态(简单介绍)

    关于Java线程的状态网上的说法不一,有的说是6种状态,有的说是5中状态,索性就查看了一下Java源码.Thread类里面有一个枚举类,如下: public enum State {NEW,RUNNA ...

  6. java 线程的几种状态(转载)

    java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明: NEW 状态是指线程刚创建, 尚未启动 RUNNABLE 状态是线程正在正常 ...

  7. Java线程的6种状态

    线程的概念,以及线程的创建方式,见我之前写的博文 本篇文章主要讲Java线程的6种状态 6种状态:初始状态(new) .可运行状态(Runnable).运行状态(Running).阻塞状态(Block ...

  8. 详解Java线程的几种状态

    一言不合翻源码,一下就是Thread类源码中State内置枚举,列举出了Java线程的几种状态: /*** A thread state. A thread can be in one of the ...

  9. java线程的几种状态

    线程共有6种状态:NEW.RUNNABLE.BLOCKED.WAITING.TIMED_WAITING.TERMINATED.分别对应于:新建.运行.阻塞.等待.带超时的等待.终止. 1)新建状态(N ...

最新文章

  1. ubuntu 下使用KVM安装redhat/winxp
  2. Spring注解开发-@Scope作用域注解
  3. boost::asio::ip::tcp实现阻塞tcp echo客户端的程序
  4. 你不知道LinkedList中的方法
  5. 硬件编程:硬件开发中常用的几种通信接口总结
  6. 面试题3:二维数组中的查找
  7. python经典书籍:Python编程实战 运用设计模式、并发和程序库创建高质量程序
  8. My 1st webUI try
  9. java servlet init方法_Servlet详解之两个init方法的作用
  10. 谷歌怎么保存网页为图片?
  11. 微众银行贯彻普惠金融 探索金融扶贫新模式
  12. python 战舰_Python战舰:获取用户输入的他们想要多少艘战舰
  13. 电子书沦为“压泡面”神器,其实高端电子书就该从这两个里边选
  14. 7-6 王牌特工3 (15 分)
  15. 小程序“Mustache”语法{{}}(双大括号)获取不到值或图片
  16. [StringIO和BytesIO]
  17. posix_memalign函数详解以及使用时的注意事项
  18. 历年全国计算机技术与软件专业资格(水平)考试真题及答案汇总
  19. notepad删除包含/不包含的字符
  20. QGIS 添加国内地图提供商(高德/百度/必应/腾讯)卫星及路网图

热门文章

  1. python 实现链表
  2. 从CES看PC趋势:英特尔AMD成盟友 显示器会更大
  3. 寻找雷劈数(C实现)
  4. 考研:研究生考试(十五天学完)之研究生学霸重点知识点总结之考研必知(考研时间/科目/必备物件)、【考研政治】/【考研英语】/【考研数学】经验总结(历年规律分析、技巧总结、经验分享)
  5. 内存计算技术应对大数据挑战
  6. 【2021最新版】Mysql面试题总结(115道题含答案解析)
  7. 企业权限管理系统第3章--产品操作
  8. SRE学习笔记2:衡量系统稳定性的指标
  9. IB物理IA:如何写Marking Rubric中Evaluation对应部分获得满分?
  10. 方便好用的通知短信API