Java 线程的七种状态
该原创文章首发于微信公众号:字节流动
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 线程的七种状态相关推荐
- java 线程的几种状态(转载)
java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明: NEW 状态是指线程刚创建, 尚未启动 RUNNABLE 状态是线程正在正常 ...
- Java线程的6种状态
线程的概念,以及线程的创建方式,见我之前写的博文 本篇文章主要讲Java线程的6种状态 6种状态:初始状态(new) .可运行状态(Runnable).运行状态(Running).阻塞状态(Block ...
- 详解Java线程的几种状态
一言不合翻源码,一下就是Thread类源码中State内置枚举,列举出了Java线程的几种状态: /*** A thread state. A thread can be in one of the ...
- Java 线程的6种状态(简单介绍)
关于Java线程的状态网上的说法不一,有的说是6种状态,有的说是5中状态,索性就查看了一下Java源码.Thread类里面有一个枚举类,如下: public enum State {NEW,RUNNA ...
- java线程的几种状态
线程共有6种状态:NEW.RUNNABLE.BLOCKED.WAITING.TIMED_WAITING.TERMINATED.分别对应于:新建.运行.阻塞.等待.带超时的等待.终止. 1)新建状态(N ...
- Java线程的5种状态及切换
ava中的线程的生命周期大体可分为5种状态. 1. 新建(NEW):新创建了一个线程对象. 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方 ...
- java 线程的几种状态
java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明: NEW 状态是指线程刚创建, 尚未启动 RUNNABLE 状态是线程正在正常 ...
- Java线程的6种状态及切换(透彻讲解)
Java中线程的状态分为6种. 1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法. 2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running ...
- Java 线程的 5 种状态
线程状态图: 线程共包括以下 5 种状态: 1. 新建状态(New): 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread(). 2. 就绪状态(Runna ...
- Java线程的6种状态(NEW,RUNNABLE,BLOCKED,WAITING,TINED_WATING,TEMINATE)
1,NEW()新建 线程刚被创建,但未被启动.也就是没有调用start方法. 2,Runnable(可运行) 线程可以在java的虚拟机中运行的状态,可能正在运行自己的代码,也可能没有,这取决于cpu ...
最新文章
- Blender 2.9中的真实感三维产品全流程制作学习教程
- SAP RETAIL 商品主数据里影响自动补货结果的几个参数 II
- 改头换面 OpenSSL将改用新型许可证
- 9.2.4 .net core 通过ViewComponent封装控件
- 森斯伯里管理奖学金 皇家工程学院
- python编译成exe有意义吗_python工程编译成EXE
- 用开源项目PhotoView实现图片的双指缩放和双击放大缩小
- 智能机器人建房子后房价走势_人工智能未来10年将颠覆房地产行业,你还敢买房吗?...
- Python GUI篇——关不掉的小窗口
- 网络压缩《网络压缩论文整理》
- 常用的数学计算工具类
- 理想汽车CEO李想晒11月理想ONE成绩
- Visual C# .NET2003语言的改变
- java miniui datagrid_miniui datagrid 的客户端分页解决方案
- linux:记录一次 处理tomcat启动卡死无报错现象的曲折过程
- 文本特征提取方法介绍
- 传奇开服怎么开服?不会技术自己能开服吗?传奇开服需要准备什么?前期需要投入多少?
- win7程序关闭后弹出 程序兼容性助手 这个程序可能安装不正确 如果此程序没有正确安装,处理方式
- 微信小程序中获取用户微信公众号授权(openid)用来发送模板消息
- java dwr 漏洞_DWR异常情况处理常见方法解析
热门文章
- 实现一个在线抽奖系统,就算是个小白看了也能做出来(附源码)
- excel跨多个表格求和_收藏学习!一个Excel函数搞定进销存报表,你还在花钱买软件?...
- 理解 asyncio 来构建高性能 Python 网络程序 - Ricequant米筐量化
- 亲历2010中国移动开发者大会
- freeswitch+kamailio+unimrcp
- nifi从入门到实战(保姆级教程)——环境篇
- 阿铭Linux_传统IDC 部署网站学习笔记20190125
- Linux cmd 常用快捷键(自用)
- cmd操作 以及几个常用快捷键
- 安卓默认下载工具_PanDownload安卓内测版 — 不限速下载工具