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

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

RUNNABLE:正在java虚拟机中执行的线程处于这种状态
当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中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。

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

  2. Java内存泄漏分析系列之四:jstack生成的Thread Dump日志线程状态

    原文地址:http://www.javatang.com Thread Dump日志的线程信息 以下面的日志为例: "resin-22129" daemon prio=10 tid ...

  3. JAVA设计模式详解(六)----------状态模式

    各位朋友,本次LZ分享的是状态模式,在这之前,恳请LZ解释一下,由于最近公司事情多,比较忙,所以导致更新速度稍微慢了些(哦,往后LZ会越来越忙=.=). 状态模式,又称状态对象模式(Pattern o ...

  4. 1,Thread 概念以及Thread 的6个状态

    Thread 有6个状态 , NEW, RUNNABLE , BLOCKED, WATTING, TIMED WAITING, TERMINATED 1.NEW至今尚未启动的线程的状态.2.RUNNA ...

  5. JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态

    JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态  2017年10月25日  Jet Ma  JavaPlatform JVM故障分析系列系列文章 JVM故障分析系列之一: ...

  6. 线程池中状态与线程数的设计分析(ThreadPoolExecutor中ctl变量)

    目录 预备知识 源码分析 submit()源码分析 shutdownNow()源码分析 代码输出 设计目的与优点 预备知识 可以先看下我的另一篇文章对于Java中的位掩码BitMask的解释. 1.一 ...

  7. 【IDE】idea在debug模式启动非常慢,debug模式一直在启动中状态

    现象:一直处于启动中状态,日志刷的很慢,非debug模式正常启动: 最终解决方式:下图按钮,取消所有打过的断点,问题解决

  8. web中状态码301和302的区别

    web中状态码301和302的区别 总的区别就是:302重定向只是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址,因为服务器返回302,所以,搜索搜索引擎认为新的网址是暂时的.而301重定向是永久 ...

  9. 14.并发与异步 - 1.线程处理Thread -《果壳中的c#》

    14.2.1 创建一个线程 实例化一个Thread对象,然后调用它的Start方法,就可以创建和启动一个新的线程.最简单的Thread构造方法是接受一个ThreadStart代理:一个无参方法,表示执 ...

随机推荐

  1. 06python 之基本数据类型

    数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483646 在64位机器上,整数的位数为64位,取值范围为-2** ...

  2. JVM优化(一)-- 入门

    一.JVM的概念 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现 ...

  3. 转的:burp suite小例子

    Web安全测试时经常会遇到一些蹩脚的注射点,而因各种原因利用注射又无法获取网站管理账号或拥有网站管理权限却迟迟不能upload一个shell的时候,可能会权衡一下web权限与数据库信息,哪个是我们所需 ...

  4. C#中的方法,方法的重载,以及几个关键字

    嘿嘿,今天来的早点啦,主要有问题解决不了,希望看到的亲们知道怎么整的给我说下,先谢谢哦:-D <一>首先复习了三元表达式:即  表达式1,表达式2,表达式3: 举例: bool resul ...

  5. 详谈redis优化配置和redis.conf

    1. Redis.conf 配置参数: #是否作为守护进程运行 daemonize yes #如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid pidfile redi ...

  6. 打造不死的asp木马

    作者:黑色记忆本文已发表于<黑客X档案>杂志第十期 版权归<黑客X档案>所有 转载请注明版权 想不到,前几天我才发现,我千辛万苦收集的asp木马,居然没有几个不被Kill的.常 ...

  7. 【Thinkphp5 】部署nginx时nginx.conf配置文件修改

    背景:thinkphp5项目 服务器环境: lnmp 1 打开路径  /usr/local/nginx/conf/vhost/ 此路径下会有你添加的域名文件夹..找到对应的域名打开. 2  代码如下, ...

  8. C/C++对Lu系统内置动态对象进行运算符重载

    欢迎访问Lu程序设计 C/C++对Lu系统内置动态对象进行运算符重载 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32. ...

  9. Centos7 安装zabbix3.0 服务端 详细

    参考: https://www.cnblogs.com/37yan/p/6879218.html http://blog.csdn.net/hao134838/article/details/5712 ...

  10. go http 文件下载

    package main import ( "fmt" "net/http" "os" ) func DownFile() { userFi ...