JAVA线程的生命周期以及5种状态转换
一:线程的生命周期
- 新建状态(NEW):
新创建
一个线程对象。 - 就绪状态(RUNNABLE):线程对象创建后,调用该对象的
start()
方法。该状态的线程等待被线程调度选中,获取CPU的使用权。 - 运行状态(RUNNING):
就绪状态(RUNNABLE)
的线程获取CPU时间片开始执行程序代码。 - 阻塞状态(BLOCKED):阻塞状态是指线程因为某种原因让出了CPU使用权,直到线程再次进入
就绪状态(RUNNABLE)
,等待再次获取CPU时间片进入运行状态。 - 死亡状态(DEAD):
run方法正常退出
而自认死亡或者异常终止run方法
导致线程结束。
进入阻塞状态的情况:
- 等待阻塞:运行状态(RUNNING)的线程执行o.wait()方法,JVM会把该线程放入等待队列()中。
- 同步阻塞:运行状态(RUNNING)的线程在获取对象的同步锁的时候,这个同步锁正在被其他线程占用,则JVM会把该线程放入锁池(lock pool)中。
- 其他阻塞:运行状态(RUNNING)的线程执行Thread.sleep()或者t.join()方法、用户发出I/O请求情况下JVM会将线程设置为阻塞状态(BLOCKED),以上情况完毕后线程会重新转入就绪状态(RUNNABLE)。
二:线程5种状态转换图
清晰的图可以看https://www.processon.com/view/link/5ea8490607912948b0e3f2a2
三:几个方法的比较
- Thread.sleep(long millis)方法,一定是
当前线程进入阻塞,但不释放对象锁
,等待millis后线程自动进入就绪状态。作用:等待其他任务执行结果。 - Thread.yield()方法,一定是当前线程调用此方法,当前线程放弃获取CPU的时间片,
由运行态转变为就绪态
,让操作系统中再次选择线程执行。作用:让相同优先级的线程轮流执行,单并不能保证轮流执行,根据解释我们了解到,转成就绪态的的线程还有可能再次选中执行。Thread.yield()方法不会导致阻塞。 - t.join()/t.join(long millis)方法,当前线程调用t2.join()方法,当
前线程阻塞但是不会释放对象锁
,直到t2线程执行完毕或者millis时间到,则当前的线程恢复就绪状态。作用:让优先级比较高的线程优先执行。 - obj.wait()/obj.wait(long timeout)方法,
当线程调用对象的wait()方法,当前线程释放对象锁
,进入等待队列。通过notify()/notifyAll()唤醒或者timeout时间到自动唤醒。 - obj.notify()方法,唤醒在此对象监视器上等待的单个线程。notifyAll()是唤醒在此对象监视器上等待的所有线程。
JAVA线程的生命周期以及5种状态转换相关推荐
- java -- 线程的生命周期
线程的生命周期 1.线程的生命周期线程是一个动态执行的过程,它也有一个从产生到死亡的过程. (1)生命周期的五种状态 新建(new Thread)当创建Thread类的一个实例(对象)时,此线程进入新 ...
- 图解 Java 线程的生命周期,看完再也不怕面试官问了
文章首发自个人微信公众号: 小哈学Java www.exception.site/java-concur- 在 Java 初中级面试中,关于线程的生命周期可以说是常客了.本文就针对这个问题,通过图文并 ...
- 线程的生命周期及五种基本状态介绍
一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中的各知识点,Java中的多线程也就基本上掌 ...
- java线程的生命周期及wait(),notify(),notifyAll()的详解分析
1.java线程的生命周期 线程是一个动态执行的过程,它也有一个从产生到死亡的过程. (1)生命周期的五种状态 新建(new Thread) 当创建Thread类的一个实例(对象)时, ...
- 《Java 并发编程实战》—— Java线程的生命周期
09 | Java线程的生命周期 通用的线程生命周期:初始状态.可运行状态.运行状态.休眠状态和终止状态. 初始状态,指的是线程已经被创建,但是还不允许分配 CPU 执行.这个状态属于编程语言特有的, ...
- Activity生命周期的三种状态
生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停止状态.接下来将 ...
- 什么是生命周期?Activity生命周期的三种状态
什么是生命周期 生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停 ...
- java线程6种状态转换,Java线程的生命周期和各种状态转换详解
在Java中,任何对象都有生命周期,线程也不例外,它也有自己的生命周期.当Thread对象创建完成时,线程的生命周期便开始了,当线程任务中代码正常执行完毕或者线程抛出一个未捕获的异常(Exceptio ...
- Java线程的生命周期及线程的几种状态
线程也具有生命周期,主要包括 7 种状态: 出生状态. 就绪状态. 运行状态. 等待状态. 休眠状态. 阻塞状态. 死亡状态, 下面对线程生命周期中的 7 种状态做说明. 出生状态:用户在创建线程时所 ...
最新文章
- Anaconda入门使用指南(二)
- mysql key value 排序_MySQL利用索引优化ORDER BY排序语句的方法
- python 序列排序 排序后返回相应的索引
- FlowVisor入门教程
- 应用打包Ubuntu下部署ScriptCase应用一例
- PostgreSQL mysql 兼容性之 - 字符编码转换 CONVERT
- m.2接口和nvme区别_m.2 nvme和m.2有区别吗?
- java web ssh jar_java web 汽车美容管理系统 ssh 毕设作品
- c++语言iso标准,C++20标准 (ISO/IEC 14882:2020) 正式发布
- sqlserver去重记录_SQL去除重复记录(七种)
- Windows下安装Tp6.0框架,图文。Thinkphp6.0安装教程
- 剑指offer总目录
- uniapp分销商城源码开发
- html5初学者小游戏源代码,html5 一个“一笔画”小游戏源码(通关)
- 剪映怎么把英文字幕翻译成中文?(附视频教程+字幕翻译工具)
- 写乐100道练习题_【写乐钢笔使用】_摘要频道_什么值得买
- 怎样避免每次运行都启用宏的麻烦
- 贴片晶振为智能手环带来了哪些功能?
- 制度罚则-- 线下Bug规范
- iOS使用ShareSdk进行第三方微信登录
热门文章
- 库存管理-历史库存和收发存系列-MB5B
- ALV报表中处理双击行项目事件
- 企业IM,阿里钉钉“恶”企业微信“善”?
- 拼购电商不是团购,但扎的的却是三四五线城市老百姓的心
- tengine简单安装_实操丨如何在EAIDK上部署Tengine开发AI应用之物体检测应用入门(C++)...
- java调用方法返回数组_JAVA使用下面的方法头编写方法,返回两个数组列表的并集...
- mysql数据库怎么安装建表_mysql数据库安装及建表注意事项
- 江苏大学计算机专业江苏排名,2018江苏大学专业排名及分数线 王牌专业有哪些...
- php中删除评论怎么做的,php实现评论回复删除功能
- java sqlserver 2000_谁能救救我啊,关于JAVA连接SQLserver2000