一:线程的生命周期

  1. 新建状态(NEW)新创建一个线程对象。
  2. 就绪状态(RUNNABLE):线程对象创建后,调用该对象的start()方法。该状态的线程等待被线程调度选中,获取CPU的使用权。
  3. 运行状态(RUNNING)就绪状态(RUNNABLE)的线程获取CPU时间片开始执行程序代码。
  4. 阻塞状态(BLOCKED):阻塞状态是指线程因为某种原因让出了CPU使用权,直到线程再次进入就绪状态(RUNNABLE),等待再次获取CPU时间片进入运行状态。
  5. 死亡状态(DEAD)run方法正常退出而自认死亡或者异常终止run方法导致线程结束。

进入阻塞状态的情况:

  1. 等待阻塞:运行状态(RUNNING)的线程执行o.wait()方法,JVM会把该线程放入等待队列()中。
  2. 同步阻塞:运行状态(RUNNING)的线程在获取对象的同步锁的时候,这个同步锁正在被其他线程占用,则JVM会把该线程放入锁池(lock pool)中。
  3. 其他阻塞:运行状态(RUNNING)的线程执行Thread.sleep()或者t.join()方法、用户发出I/O请求情况下JVM会将线程设置为阻塞状态(BLOCKED),以上情况完毕后线程会重新转入就绪状态(RUNNABLE)。

二:线程5种状态转换图


清晰的图可以看https://www.processon.com/view/link/5ea8490607912948b0e3f2a2

三:几个方法的比较

  1. Thread.sleep(long millis)方法,一定是当前线程进入阻塞,但不释放对象锁,等待millis后线程自动进入就绪状态。作用:等待其他任务执行结果。
  2. Thread.yield()方法,一定是当前线程调用此方法,当前线程放弃获取CPU的时间片,由运行态转变为就绪态,让操作系统中再次选择线程执行。作用:让相同优先级的线程轮流执行,单并不能保证轮流执行,根据解释我们了解到,转成就绪态的的线程还有可能再次选中执行。Thread.yield()方法不会导致阻塞。
  3. t.join()/t.join(long millis)方法,当前线程调用t2.join()方法,当前线程阻塞但是不会释放对象锁,直到t2线程执行完毕或者millis时间到,则当前的线程恢复就绪状态。作用:让优先级比较高的线程优先执行。
  4. obj.wait()/obj.wait(long timeout)方法,当线程调用对象的wait()方法,当前线程释放对象锁,进入等待队列。通过notify()/notifyAll()唤醒或者timeout时间到自动唤醒。
  5. obj.notify()方法,唤醒在此对象监视器上等待的单个线程。notifyAll()是唤醒在此对象监视器上等待的所有线程。

JAVA线程的生命周期以及5种状态转换相关推荐

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

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

  2. 图解 Java 线程的生命周期,看完再也不怕面试官问了

    文章首发自个人微信公众号: 小哈学Java www.exception.site/java-concur- 在 Java 初中级面试中,关于线程的生命周期可以说是常客了.本文就针对这个问题,通过图文并 ...

  3. 线程的生命周期及五种基本状态介绍

    一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中的各知识点,Java中的多线程也就基本上掌 ...

  4. java线程的生命周期及wait(),notify(),notifyAll()的详解分析

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

  5. 《Java 并发编程实战》—— Java线程的生命周期

    09 | Java线程的生命周期 通用的线程生命周期:初始状态.可运行状态.运行状态.休眠状态和终止状态. 初始状态,指的是线程已经被创建,但是还不允许分配 CPU 执行.这个状态属于编程语言特有的, ...

  6. Activity生命周期的三种状态

    生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停止状态.接下来将 ...

  7. 什么是生命周期?Activity生命周期的三种状态

    什么是生命周期 生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停 ...

  8. java线程6种状态转换,Java线程的生命周期和各种状态转换详解

    在Java中,任何对象都有生命周期,线程也不例外,它也有自己的生命周期.当Thread对象创建完成时,线程的生命周期便开始了,当线程任务中代码正常执行完毕或者线程抛出一个未捕获的异常(Exceptio ...

  9. Java线程的生命周期及线程的几种状态

    线程也具有生命周期,主要包括 7 种状态: 出生状态. 就绪状态. 运行状态. 等待状态. 休眠状态. 阻塞状态. 死亡状态, 下面对线程生命周期中的 7 种状态做说明. 出生状态:用户在创建线程时所 ...

最新文章

  1. Anaconda入门使用指南(二)
  2. mysql key value 排序_MySQL利用索引优化ORDER BY排序语句的方法
  3. python 序列排序 排序后返回相应的索引
  4. FlowVisor入门教程
  5. 应用打包Ubuntu下部署ScriptCase应用一例
  6. PostgreSQL mysql 兼容性之 - 字符编码转换 CONVERT
  7. m.2接口和nvme区别_m.2 nvme和m.2有区别吗?
  8. java web ssh jar_java web 汽车美容管理系统 ssh 毕设作品
  9. c++语言iso标准,C++20标准 (ISO/IEC 14882:2020) 正式发布
  10. sqlserver去重记录_SQL去除重复记录(七种)
  11. Windows下安装Tp6.0框架,图文。Thinkphp6.0安装教程
  12. 剑指offer总目录
  13. uniapp分销商城源码开发
  14. html5初学者小游戏源代码,html5 一个“一笔画”小游戏源码(通关)
  15. 剪映怎么把英文字幕翻译成中文?(附视频教程+字幕翻译工具)
  16. 写乐100道练习题_【写乐钢笔使用】_摘要频道_什么值得买
  17. 怎样避免每次运行都启用宏的麻烦
  18. 贴片晶振为智能手环带来了哪些功能?
  19. 制度罚则-- 线下Bug规范
  20. iOS使用ShareSdk进行第三方微信登录

热门文章

  1. 库存管理-历史库存和收发存系列-MB5B
  2. ALV报表中处理双击行项目事件
  3. 企业IM,阿里钉钉“恶”企业微信“善”?
  4. 拼购电商不是团购,但扎的的却是三四五线城市老百姓的心
  5. tengine简单安装_实操丨如何在EAIDK上部署Tengine开发AI应用之物体检测应用入门(C++)...
  6. java调用方法返回数组_JAVA使用下面的方法头编写方法,返回两个数组列表的并集...
  7. mysql数据库怎么安装建表_mysql数据库安装及建表注意事项
  8. 江苏大学计算机专业江苏排名,2018江苏大学专业排名及分数线 王牌专业有哪些...
  9. php中删除评论怎么做的,php实现评论回复删除功能
  10. java sqlserver 2000_谁能救救我啊,关于JAVA连接SQLserver2000