Java线程状态及其转换
Java线程的状态及转换
- 线程状态及其转换
- 线程的状态
- 详细介绍:
- 新建状态(NEW):
- 就绪状态(RUNNABLE):
- 运行状态(RUNNING):
- 阻塞状态(BLOCKED):
- 等待状态(WAITING):
- 睡眠等待状态(TIMED_WAITING)
- 终止状态(TERMINATED)
- 线程状态的转换
线程状态及其转换
线程的状态
线程的状态,在java中是提供了枚举类型的State。
public enum State {NEW, //创建状态RUNNABLE, //运行状态BLOCKED, //阻塞状态WAITING, //等待状态TIMED_WAITING, //睡眠等待状态TERMINATED; //终止状态}
可以看出Java中提供了6种线程状态,但是在操作系统中,常常将RUNNABLE状态,分为以下两种:RUNNABLE:就绪状态,RUNNING:运行状态。
因此:可以总结为下面这7种状态:
- 新建状态:NEW
- 就绪状态:RUNNABLE
- 运行状态:RUNNING
- 阻塞状态:BLOCKED
- 等待状态:WAITING
- 睡眠等待状态:TIMED_WAITING
- 终止状态:TREMINATED
详细介绍:
新建状态(NEW):
- 用new语句创建的线程处于新建状态,此时和其他对象一样,在堆中仅仅给分配了内存
就绪状态(RUNNABLE):
- 当一个线程创建后,调用了start方法,线程状态就进入到就绪状态,处于就绪状态的线程意味着所有需要的资源已经装备就绪,等待CPU的调用,CPU的调度是由操作系统控制的,用户是无法操控。
运行状态(RUNNING):
- 处于运行状态的线程占用CPU资源,执行程序代码。(注:只有处于就绪状态的线程才能有机会进入到运行状态)
阻塞状态(BLOCKED):
- 进入这种阻塞状态的原因可以是:1.线程期望进入同步方法或者同步代码块(Synchronized)2.尚未获取到锁资源的情况下,可以从运行状态进入到阻塞状态。
等待状态(WAITING):
- 如果调用wait()方法,就进入到等待状态,即调用wait()会触发线程从运行状态进入到阻塞状态而无法执行,直到其他线程发出notify或notifyAll方法,此时线程才会从等待状态进入到阻塞状态,进而进入就绪状态。(详情结合下图)
睡眠等待状态(TIMED_WAITING)
- 如果线程调用sleep(long)、join(long)、wait(long)等方法时,会使线程进入到TIMED_WAITING状态,即指定了阻塞的时间。等到达了指定的时间后就可以继续进入就绪状态等待CPU的调度。
终止状态(TERMINATED)
- 当线程退出run()方法时,线程就进入了终止状态,该状态是线程的生命周期的结束。
线程状态的转换
附图:
看到上面图,我们可以看出,线程状态的转换,有些是依靠我们的线程方法的。方法详解,戳底部链接。
线程必定经过的四个状态:NEW -> RUNNABLE -> RUNNING -> TERMINATED
线程需要资源不足时,会进入阻塞状态:BLOCKED、WAITING、TIME_WAITING
更多有关Java多线程的内容,详戳【Java多线程】,方法详解,戳【线程基础方法】,更多其他内容,详戳主页。
Java线程状态及其转换相关推荐
- Java线程状态及转换
推荐:Java并发编程汇总 Java线程状态及转换 原文地址 Java线程状态和关闭线程的正确姿势 正文 Java中的线程有六种状态,使用Thread类中的枚举类来实现,如下,我对每个状态都进行了一定 ...
- Java线程状态及 wait、sleep、join、interrupt、yield等的区别
Java中的线程状态(详见Java线程状态及转换-MarchOn): wait:Object类的实例方法,释放CPU执行权,进入等待状态,直到 被中断.被拥有该对象锁的线程唤醒(notify或not ...
- java线程切换 notify_浅谈 Java线程状态转换及控制
作者:城北有个混子 出自:博客园 1.线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞( ...
- 【图解】透彻Java线程状态转换
大家好,我是阿星,好久不见,欢迎来到Java并发编程系列番外篇线程状态转换,内容通俗易懂,请放心食用. 线程状态 先来个开场四连问 Java线程状态有几个? Java线程状态是如何转换? Java线程 ...
- JAVA线程状态的10种转换
JAVA线程状态转换 参考视频:https://www.bilibili.com/video/BV16J411h7Rd 后续将继续补充,同时完善. 情况1NEW–>RUNNABLE 当调用t ...
- 面试必备,Java线程状态之细节回顾
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://dwz.cn/vYqjShos Java线程有6种状态 在某个给定时间点 ...
- java线程状态——java线程状态图
java线程状态图,网上有很多资源,无外乎两种,如下: 图一 图二 图二是比较多的,可以看出来我贴出的链接这个博主挺有心的,还把右下角的水印给抹去了,赤裸裸的伪原创心理呀. 还有几张图说的也挺不错的, ...
- java线程状态和状态切换
背景 先来探讨一个关于多线程的基础知识:java线程有多少种状态?根据JDK定义,答案是六种!为什么很多人给出的答案却是五种呢?这极有可能是将操作系统层面的线程状态和java线程状态混为一潭了.因为, ...
- 【Java多线程】Java线程状态及转换方法详解
文章目录 1. 现代操作系统中的线程状态及转换(5种) 2. Java 线程状态(6种) 2.1 NEW 创建 2.2 RUNNABLE 运行 2.3 BLOCKED 阻塞 2.4 WAITING 等 ...
最新文章
- ARM 环境下使用azure powershell 从远程blob中拉去vhd 并创建虚拟机
- R假设检验之k-s检验(KOLMOGOROV AND SMIRNOV TEST)
- 《LeetCode力扣练习》剑指 Offer 06. 从尾到头打印链表 Java
- data spring 指定时区_SpringBoot 统一时区的方案
- 解决Windows下新安装的CodeBlocks无法编译运行
- 处理unsigned相减错误(BIGINT UNSIGNED value is out of range)
- dotnet若干说明图片
- 【Elasticsearch】请在64位平台上使用Lucene的MMapDirectory
- 洛谷—— P2658 汽车拉力比赛
- ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)
- Notification通知
- GreenDroid 开源UI组件
- 周立功arm linux教程,极速搭建周立功IMX287A ARM Linux开发环境
- python控制小爱同学_小爱同学控制电脑开机 - IT客栈
- 主界面边框流动效果长时间挂机后会卡顿
- java中的pojo是什么意思
- Linux系统设置命令大全
- 微生信在线绘制KEGG Pathway通路分类汇总图
- Category(类别)和扩展(Extension)的区别
- sublime快速插入多行递增的数字