该原创文章首发于微信公众号:字节流动

Java 线程状态转换图

Java 线程状态

在 Java 线程的生命周期中,按复杂的并发场景考虑,可将 Java 线程的状态分为七种,分别是:新建(New),可运行(Runnable 或 Ready),运行(Running),无限期等待(Waiting),限期等待(Timed Waiting),阻塞(Blocked),结束(Terminated)。

新建(New)状态

新创建一个线程对象,尚未执行。

可运行(Runnable 或 Ready)状态

新创建的线程调用 start 方法后便处于 Runnable 状态,刚刚结束等待(获取到锁)或刚结束阻塞状态的线程也会处于 Runnable 状态,处于该状态的线程位于可运行线程池中,等待获取 CPU 资源。

运行(Running)状态

处于 Runnable 状态的线程获取到 CPU 资源,执行程序代码。

无限期等待(Waiting)状态

synchronized 代码块内被锁住的对象调用了它的 wait() 方法或者在当前线程中调用了其他线程的 join() 方法,那么当前线程将会释放占有的锁,释放 CPU 资源,阻塞在等待队列里面,一直等待被 synchronized 修饰的对象调用 notify() 或 notifyAll() 方法唤醒或者 join 的其他线程执行结束(异常退出)。在并发时,处于无限期等待状态的线程被唤醒之后,还要去竞争对象的锁,如果竞争不到,线程将会被阻塞在对象的锁池中,竞争到锁之后,线程将会处于 Runnable 状态。

限期等待(Timed Waiting)状态

与无限期等待(Waiting)状态不同之处在于,调用 wait 和 join 方法时传入了等待限定时间。另外,线程调用 sleep() 方法也会处于限期等待(Timed Waiting)状态,会释放 CPU 资源,但并不会释放锁,一直到休眠结束变成 Runnable 状态。

阻塞(Blocked)状态

线程程序执行到 synchronized 代码块或 Reentrant.lock() 方法,对象的锁被其他线程占用时,当前线程将会被阻塞在对象的锁池中,处于阻塞(Blocked)状态。

结束(Terminated)状态

线程 run 方法执行完毕或者异常退出,则该线程的生命周期终结,不能再次使用。

联系与交流

我的公众号

我的微信

Java 线程的七种状态相关推荐

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

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

  2. Java线程的6种状态

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

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

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

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

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

  5. java线程的几种状态

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

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

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

  7. java 线程的几种状态

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

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

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

  9. Java 线程的 5 种状态

    线程状态图: 线程共包括以下 5 种状态: 1. 新建状态(New): 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread(). 2. 就绪状态(Runna ...

  10. Java线程的6种状态(NEW,RUNNABLE,BLOCKED,WAITING,TINED_WATING,TEMINATE)

    1,NEW()新建 线程刚被创建,但未被启动.也就是没有调用start方法. 2,Runnable(可运行) 线程可以在java的虚拟机中运行的状态,可能正在运行自己的代码,也可能没有,这取决于cpu ...

最新文章

  1. Blender 2.9中的真实感三维产品全流程制作学习教程
  2. SAP RETAIL 商品主数据里影响自动补货结果的几个参数 II
  3. 改头换面 OpenSSL将改用新型许可证
  4. 9.2.4 .net core 通过ViewComponent封装控件
  5. 森斯伯里管理奖学金 皇家工程学院
  6. python编译成exe有意义吗_python工程编译成EXE
  7. 用开源项目PhotoView实现图片的双指缩放和双击放大缩小
  8. 智能机器人建房子后房价走势_人工智能未来10年将颠覆房地产行业,你还敢买房吗?...
  9. Python GUI篇——关不掉的小窗口
  10. 网络压缩《网络压缩论文整理》
  11. 常用的数学计算工具类
  12. 理想汽车CEO李想晒11月理想ONE成绩
  13. Visual C# .NET2003语言的改变
  14. java miniui datagrid_miniui datagrid 的客户端分页解决方案
  15. linux:记录一次 处理tomcat启动卡死无报错现象的曲折过程
  16. 文本特征提取方法介绍
  17. 传奇开服怎么开服?不会技术自己能开服吗?传奇开服需要准备什么?前期需要投入多少?
  18. win7程序关闭后弹出 程序兼容性助手 这个程序可能安装不正确 如果此程序没有正确安装,处理方式
  19. 微信小程序中获取用户微信公众号授权(openid)用来发送模板消息
  20. java dwr 漏洞_DWR异常情况处理常见方法解析

热门文章

  1. 实现一个在线抽奖系统,就算是个小白看了也能做出来(附源码)
  2. excel跨多个表格求和_收藏学习!一个Excel函数搞定进销存报表,你还在花钱买软件?...
  3. 理解 asyncio 来构建高性能 Python 网络程序 - Ricequant米筐量化
  4. 亲历2010中国移动开发者大会
  5. freeswitch+kamailio+unimrcp
  6. nifi从入门到实战(保姆级教程)——环境篇
  7. 阿铭Linux_传统IDC 部署网站学习笔记20190125
  8. Linux cmd 常用快捷键(自用)
  9. cmd操作 以及几个常用快捷键
  10. 安卓默认下载工具_PanDownload安卓内测版 — 不限速下载工具