线程也具有生命周期,主要包括 7 种状态:
出生状态、
就绪状态、
运行状态、
等待状态、
休眠状态、
阻塞状态、
死亡状态,

下面对线程生命周期中的 7 种状态做说明。

  1. 出生状态:用户在创建线程时所处的状态,在用户使用该线程实例调用 start() 方法之前,线程都处于出生状态。
  2. 就绪状态:也称可执行状态,当用户调用 start() 方法之后,线程处于就绪状态。
  3. 运行状态:当线程得到系统资源后进入运行状态。
  4. 等待状态:当处于运行状态下的线程调用 Thread 类的 wait() 方法时,该线程就会进入等待状态。进入等待状态的线程必须调用Thread 类的 notify() 方法才能被唤醒。notifyAll() 方法是将所有处于等待状态下的线程唤醒。
  5. 休眠状态:当线程调用 Thread 类中的 sleep() 方法时,则会进入休眠状态。
  6. 阻塞状态:如果一个线程在运行状态下发出输入/输出请求,该线程将进入阻塞状态,在其等待输入/输出结束时,线程进入就绪状态。对阻塞的线程来说,即使系统资源关闭,线程依然不能回到运行状态。
  7. 死亡状态:当线程的 run() 方法执行完毕,线程进入死亡状态。

提示:一旦线程进入可执行状态,它会在就绪状态与运行状态下辗转,同时也可能进入等待状态、休眠状态、阻塞状态或死亡状态。

根据图所示,可以总结出使线程处于就绪状态有如下几种方法。

  • 调用 sleep() 方法。
  • 调用 wait() 方法。
  • 等待输入和输出完成。

当线程处于就绪状态后,可以用如下几种方法使线程再次进入运行状态。

  • 线程调用 notify() 方法。
  • 线程调用 notifyAll() 方法。
  • 线程调用 intermpt() 方法。
  • 线程的休眠时间结束。
  • 输入或者输出结束。

线程状态转换

Java线程的生命周期及线程的几种状态相关推荐

  1. Java—线程的生命周期及线程控制方法详解

    关注微信公众号:CodingTechWork,一起学习进步. 线程生命周期5种状态 介绍   线程的生命周期经过新建(New).就绪(Runnable).运行(Running).阻塞(Bolocked ...

  2. 线程(线程基本概念、java实现多线程、使用多线程、线程的生命周期、线程同步、线程死锁)

    (一)线程基本概念 一. 程序, 进程, 线程的概念 程序: 使用某种语言编写一组指令(代码)的集合,静态的 进程: 运行的程序,表示程序一次完整的执行, 当程序运行完成, 进程也就结束了 个人电脑: ...

  3. java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)

    1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...

  4. 线程的生命周期 和 线程的通讯

    线程的生命周期 概述: 线程从创建到执行完毕的过程就叫做生命周期,整个周期中会不同的状态,状态之间会发生相互转换的现象. 状态罗列: 新建:线程创建出来但是没有开启 就绪:start方法开启了线程, ...

  5. 线程的生命周期?线程有几种状态

    1.线程通常有五种状态:创建,就绪,运行.阻塞和死亡状态. 2.阻塞的情况又分为三种: (1).等待阻塞:运行的线程执行wait方法,该线程会释放占用的所有资源,JVM会把该线程放入"等待 ...

  6. 线程的生命周期_[线程设计]通过观察者模式监控线程生命周期

    推荐书籍:<Java高并发编程详解> 一.无法掌控 Thread 的生命周期 在 Java 中线程的实现只有一个,就是 Thread . 下面是启动一个线程的通用代码,如下: 通过 new ...

  7. 【JAVA多线程学习笔记】(1)实现线程的方式 线程生命周期 操作线程的方法

    文章目录 两种方式实现线程 继承Thread类 模拟银行叫号的程序 Runnable接口 代码1:(与swing相结合创建gui程序) Thread类的⼏个常⽤⽅法 线程生命周期 操作线程的方法 代码 ...

  8. java -- 线程的生命周期

    线程的生命周期 1.线程的生命周期线程是一个动态执行的过程,它也有一个从产生到死亡的过程. (1)生命周期的五种状态 新建(new Thread)当创建Thread类的一个实例(对象)时,此线程进入新 ...

  9. java方法生命周期_Java线程的第二种实现方式以及生命周期

    上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...

最新文章

  1. axios  一些用法总结
  2. 根据表名如何查找使用它的程序名、接口等
  3. 手机隔空充电,会有辐射吗?
  4. sap中泰国有预扣税设置吗_泰国的绘图标志| Python中的图像处理
  5. C++ opengl 绘制三角形带
  6. C#LeetCode刷题-树
  7. python 数据库模块_MySQl 数据库 之 python模块 pymysql 简单介绍
  8. stl 向量_C ++ STL中的向量delete()和clear()
  9. R 语言之数据分析高级方法「GLM 广义线性模型」
  10. 为什么古代皇帝总是治不了腐败?因为拿得越多、越安全
  11. java线程状态切换图
  12. 微信小程序picker-view中的view的高度修改问题,只能用px单位
  13. C++ 使用replace()方法替换字符串中的反斜杠:左斜杠(\)和右斜杠(/)
  14. z世代消费力白皮书_年轻世代成消费主力军,时尚界迎来IP时代
  15. verilog增量式编码器
  16. 逻辑回归(神经网络Sigmod激活函数,计量logit模型)
  17. ACE的CDR中的字节对齐问题
  18. 鸟哥的服务器《十三》Web服务器
  19. 【网络通信】Teardrop编程创造虚假IP包
  20. Hibernate 3.6.10 jar包下载链接

热门文章

  1. AI:一个20年程序猿的学习资料大全—人工智能之AI/机器学习/深度学习/计算机视觉/Matlab大赛——只有你不想要的,没有你找不到的
  2. window文件过长无法删除的处理方式
  3. 内存泄露一个经典例子
  4. 团队计划(5.25)
  5. Quartz在Spring中动态设置cronExpression
  6. GDI 绘制圆角矩形
  7. OutputCache各参数的说明【转】
  8. asp.net控件开发基础十四
  9. html对象属性大全
  10. 查看SSID的mac地址