线程共有6种状态;在某一时刻只能是这6种状态之一。这些状态由Thread.State这个枚举类型表示,并且可以通过getState()方法获得当前具体的状态类型。

包括(new,runnable,blocked,waiting,timed_waiting,terminatmed)

  NEW
  至今尚未启动的线程的状态。
  当使用new一个新线程时,如new Thread(r),但还没有执行start(),线程还没有开始运行,这时线程的状态就是NEW。

  RUNNABLE
  可运行线程的线程状态。
  当start()方法被调用时,线程就进入RUNNABLE状态。此时的线程可能正在运行,也可能没有运行

  BLOCKED
  受阻塞并且正在等待监视器锁的某一线程的线程状态。
  下列情况会进入阻塞状态:
  1.等待某个操作的返回,例如IO操作,该操作返回之前,线程不会继续下面的代码。
  2.等待某个“锁”,在其他线程或程序释放这个“锁”之前,线程不会继续执行。
  3.等待一定的触发条件。
  4.线程执行了sleep方法。
  5.线程被suspend()方法挂起。
  一个被阻塞的线程在下列情况下会被重新激活:
  1.执行了sleep()方法,睡眠时间已到。
  2.等待的其他线程或程序持有的“锁”已被释放。
  3.正在等待触发条件的线程,条件得到满足。
  4.执行了suspend()方法,被调用了resume()方法。
  5.等待的操作返回的线程,操作正确返回。

  WAITING
  某一等待线程的线程状态。
  线程因为调用了Object.wait()或Thread.join()而未运行,就会进入WAITING状态。

  TIMED_WAITING
  具有指定等待时间的某一等待线程的线程状态。
  线程因为调用了Thread.sleep(),或者加上超时值来调用Object.wait()或Thread.join()而未运行,则会进入TIMED_WAITING状态。

  TERMINATED
  已终止线程的线程状态。
  线程已运行完毕。它的run()方法已正常结束或通过抛出异常而结束。

Thread的六种状态的更多相关文章

  1. java多线程中wait/notify/sleep/join/yield方法以及多线程的六种状态

    刚开始学线程的时候也是被这几个方法搞的云里雾里的,尤其是一开始看的毕老师的视频,老师一直在强调执行权和执行资格,看的有点懵逼,当然不是说毕老师讲的不好,就是自己有点没听明白,后来复习看了一些其他的博客 ...

  2. Java:线程的六种状态及转化

    目录 Java:线程的六种状态及转化 一.新建状态(NEW) 二.运行状态(RUNNABLE) 就绪状态(READY) 运行状态(RUNNING) 三.阻塞状态(BLOCKED) 四.等待状态(WAI ...

  3. “全栈2019”Java多线程第十章:Thread.State线程状态详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  4. Java线程的六种状态

    java线程有很多种状态,最主要的有六种,被创建.运行.睡眠.等待.阻塞以及消亡六种,也有很多归结为5种,把睡眠以及等待归结为冻结: 被创建:就是线程被创建,就是new thread()之后就是创建一 ...

  5. java 线程Thread 技术--线程状态与同步问题

    线程技术第三篇: 线程的状态: 1. 创建状态: 当用new 操作符创建一个新的线程对象时,该线程就处于创建状态,系统不为它分配资源 2.可运行状态:当线程调用start 方法将为线程分配必须的系统资 ...

  6. 面经手册 · 第20篇《Thread 线程,状态转换、方法使用、原理分析》

    作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...

  7. BGP的五种报文六种状态

    BGP的五种报文 Open报文:用于协商BGP参数,包括版本号,AS号等信息.在两个路由器之间建立了TCP会话之后开始交换Open信息以确认是否能形成邻居关系,是TCP建立后发送的第一个信息,类似OS ...

  8. Android多线程分析之二:Thread的实现

    Android多线程分析之二:Thread的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处   在前文<Android多线程分析之一 ...

  9. Thread中,join()方法

    Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行. public static void main(String[] args) throws Interrupted ...

随机推荐

  1. const修饰

    const int A() //const // ====>int A(const this) { //观点1:const是修饰a,但是通过测试,我们发现,b++也不能编译通过 //这说明:co ...

  2. paper 24 :matlab的cat函数

    cat:用来联结数组 用法:C = cat(dim, A, B)       按dim来联结A和B两个数组. C = cat(dim, A1, A2, A3, ...)    按dim联结所有输入的数 ...

  3. redis数据库使用测试

    注:java spring data redis内置了几种redis序列化机制.JdkSerializationRedisSerializer最高效.有关序列化更详细的介绍-http://www.my ...

  4. Deep Learning 深度学习 学习教程网站集锦

    http://blog.sciencenet.cn/blog-517721-852551.html 学习笔记:深度学习是机器学习的突破 2006-2007年,加拿大多伦多大学教授.机器学习领域的泰斗G ...

  5. delphi 读取excel 两种方法

    http://www.cnblogs.com/ywangzi/archive/2012/09/27/2705894.html 两种方法,一是用ADO连接,问题是Excel文件内容要规则,二是用OLE打 ...

  6. 怎么开启PHP 的错误提示?

    怎么开启PHP 的错误提示?   在php.ini 修改error_reporting = E_ALL & ~E_NOTICEdisplay_errors = On重启apache服务器在运行 ...

  7. :root

    概述 选择该文档的根元素. 在HTML中,文档的根元素,和$(":root")选择的元素一样, 永远是<html>元素. 示例 设置<html>背景颜色为黄 ...

  8. iOS从健康app中获取步数信息

    统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为我们统计好了步数数据 我们只要使用HealthKit框架从健康app中获取这个数据信息就可以了 1.如下图所示 在Xcode中打开Hea ...

  9. linux驱动的入口函数module_init的加载和释放【转】

    本文转载自:http://blog.csdn.net/zhandoushi1982/article/details/4927579 就像你写C程序需要包含C库的头文件那样,Linux内核编程也需要包含 ...

  10. 161207、高并发:java.util.concurrent.Semaphore实现字符串池及其常用方法介绍

    实现字符串池: StrPool.java import java.util.ArrayList; import java.util.List; import java.util.concurrent. ...