线程的状态及状态转换

线程状态

jdk中提供了线程的状态。在Thread类中提供了一个内部的枚举类:State

public enum State{NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAIYING,TERMINATED;}

新建状态(NEW)

用new语句创建的线程处于新建状态,此时和其他对象一样,在堆中仅仅给他分配了内存。

就绪状态(RUNNABLE)

当一个线程创建后,调用了start方法,线程状态就进入到就绪状态,处于就绪状态的线程意味着所有需要的资源已经装备就绪,等待CPU的调用,CPU的调度是由操作系统控制的,用户无法操控。

运行状态(RUNNING)

处于运行状态的线程占用CPU资源,执行程序代码,只有处于就绪状态的线程才能有机会进入到运行状态。
1.如果一个时间片用完或者调用yield方法,线程会从运行状态进入到就绪状态。
2.如果线程已经执行结束了,线程会从运行状态进入终止状态。
3.如果线程执行过程中会因为等待一些资源而进入阻塞状态(WAITING,TIME_WAITTING,BLOCKED)。

阻塞状态(BLOCKED)

进入这种阻塞状态的原因可以是:线程期望进入同步方法或者同步代码块(Synchronized),尚未获取到锁资源的情况下,可以从运行状态进入到CLOCKED状态。

等待状态(WAITING)

如果调用wait方法,就进入到WAITING状态,即调用wait()会触发线程从运行状态进入到阻塞状态而无法执行,直到其他线程发出notify或notifyAll这个方法,此时线程才会从WAITING状态进入到BLOCKED状态,进而进入就绪状态。

睡眠等待(TIME_WAITING)

如果线程调用sleep(long)、join(long)、wait(long)等方法时,会触发线程进入到TIME_WAITING状态,即指定了阻塞的时间,到达了给定的时间后就可以继续进入就绪状态等待CPU的调度。

终止状态(TERMINATED)

当线程退出run()方法时,线程就进入了终止状态,该状态是结束线程的生命周期。

状态转换


一个线程的生命周期中需要的状态:NEW、RUNNABLE、RUNNING、TERMINING四个状态,当线程需要响应特定资源时,进入到阻塞状态:BLOCKED、WATING、TIME_WAITING状态。

线程方法

start()启动线程

start()方法作用是启动一个新线程,start()方法需要首先调用,start()方法不能被重复调用。
start()方法的实现是调用了一个native的方法,本质上Java创建的多线程其实是由有操作系统所提供的多线程方式来创建的。
start()方法启动子线程是通过调用系统提供的方法来启动线程。

run():子线程执行体

run()方法中是子线程的执行体
run()方法和普通的成员方法一样,可以被重复调用,如果在当前线程调用执行run()方法,是不会启动新线程。

yield():线程让步

是暂停当前的线程,并让步于其他同优先级或更高优先级的线程先执行
yield方法是定义在Thread类下的静态方法。

sleep():线程睡眠

是让线程休眠,而且是哪个线程调用,就是哪个线程休眠。
sleep()方法是Thread类下的静态方法,刚方法执行过程中会抛出interruptedException异常,即可以终止异常。
sleep()所在的线程休眠期间,线程会释放掉CPU资源给其他线程,但如果当前线程本身有锁,锁是不会释放的。
线程会由“RUNNING”状态进入到TIMED_WAITING状态,当到达休眠状态时间或者是被中断掉休眠,就会从睡眠状态进入到就绪状态,从而等待CPU的调用。

方法:
sleep(long millis)
sleep(long millis,int nanos)
这两个方法是Thread类的静态方法,不属于某个对象。

join():线程同步

暂停当前线程,等待子线程的执行,也称之为线程合并,join方法特点将并行执行。
例如:如果在ta线程中调用tb.join(),则让ta线程停止运行,并让tb线程先执行,直到tb线程执行完毕,ta线程才能继续执行。

线程的状态及状态转换相关推荐

  1. java 线程状态_JAVA线程漫谈:线程状态与状态转换解析

    线程使用方式 JDK线程的顶层抽象是Runnable接口,本质上,线程相关的类都是基于Runnable和Thread实现类实现. JDK API级别有不同的创建线程的方式,但本质是还是基于Runnab ...

  2. 线程池有哪些状态?状态是如何转换的?

    在 Java 中,线程池的状态和线程的状态是完全不同的,线程有 6 种状态:NEW:初始化状态.RUNNABLE:可运行/运行状态.BLOCKED:阻塞状态.WAITING:无时限等待状态.TIMED ...

  3. 线程的几种状态和状态之间的转换

    线程的六种状态 线程的生命周期主要有以下六种 New(新创建) Runnable(可运行) Blocked(被阻塞) Waiting(等待) Timed Waiting(计时等待) Terminate ...

  4. 线程的几种状态极其转换

    线程的几种状态极其转换 线程在一定条件下,状态会发生变化.线程一共有以下几种状态: 1.初始化状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该 ...

  5. java线程的状态及状态间的切换

    在 Java 5 以后,线程状态被明确定义在其公共内部枚举类型 java.lang.Thread.State 中. 分别是: 1.        NEW(初始化状态) 2.        RUNNAB ...

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

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

  7. c++thread里暂停线程_Java线程的 6 种状态

    作者:( •̀ ω •́ )y 出处:https://www.cnblogs.com/laishenghao/p/13972421.html 一.线程状态的枚举 Java的线程从创建到销毁总共有6种状 ...

  8. python线程状态_python 线程的五个状态

    当程序中包含多个线程时,CPU 不是一直被特定的线程霸占,而是轮流执行各个线程. 那么,CPU 在轮换执行线程的过程中,即从创建到消亡的整个过程,可能会历经 5 种状态,分别是新建.就绪.运行.阻塞和 ...

  9. 正在中止线程 iis_Zephyr线程生命周期及状态

    Zephyr中线程是使用CPU的最小单位,线程从创建后由zephyr内核进行调度,根据运行和等待资源的状况在几个状态中切换,直到线程终止退出生命周期. 线程状态 线程在其生命周期中有下面6种状态: N ...

  10. Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。...

    java中,线程的状态使用一个枚举类型来描述的.这个枚举一共有6个值: NEW(新建).RUNNABLE(运行).BLOCKED(锁池).TIMED_WAITING(定时等待).WAITING(等待) ...

最新文章

  1. Web测试需要了解的知识
  2. 用偷梁换柱法清除腾讯QQ迷你首页的方法
  3. C# 移动鼠标方法
  4. jetson nano 人脸
  5. 如何替换 Ubuntu 11.10 登录屏幕背景和logo
  6. c语言实验题——字符串排序,C语言中实现“三个数由小到大排序”的多种方法浅析...
  7. ICCV 2019 | 港大提出视频显著物体检测算法MGA,大幅提升分割精度
  8. ie型lfsr_什么是PRBS
  9. 不错的 HttpHelper类 c#
  10. Python常用数据库封装方法
  11. 最强社工必备查询网址汇总
  12. 嵌入式开发与单片机开发有什么区别
  13. 概率论与计算机的关系小论文,概率论与数理统计论文
  14. 64位计算机比32快多少,电脑系统应该选择64位还是32位 到底哪个速度更快?
  15. ALCO单螺母SN系列面板安装球阀
  16. 蓝桥杯算法竞赛培训(二) 汉诺塔与STL
  17. Typora+picgo+gitee图片外链失效,Typora历史笔记无法显示图片
  18. 虚拟空间、vps、管理型服务器和独立主机之间那些事儿
  19. 邮政储蓄银行厦门分行经营管理系统 项目总结
  20. 北京市重点区域5G网络实测分析

热门文章

  1. Java学习路线:day6 数组
  2. 如何搭建内测托管平台?有可以直接用的内测托管平台吗?
  3. 基于java的简单的(即时通讯)聊天程序
  4. 牛客网SQL实战二刷 | Day1
  5. 菜鸟日记(yzy) 微信公众号网页的开发基础(微信接口调用)
  6. 上古卷轴5传奇版LE与重制版SE的区别(LE Vs SE)
  7. 一篇文章搞定Redis Stream
  8. was expecting double-quote to start field name错误
  9. 基于python毕业设计毕设课题选题参考
  10. 计算机考研国家线好过,考研国家线真的很好过吗?