Java线程的状态
线程对象在不同的运行时期有不同的状态,状态信息就存在于Thread中的State枚举中,如下所示:
public enum State {
        /**
         * 至今尚未启动的线程处于这种状态.
         */
        NEW,
        /**
         * 正在Java虚拟机中执行的线程处于这种状态.
         */
        RUNNABLE,
        /**
         * 受阻塞并等待某个监视器锁的线程处于这种状态.
         */
        BLOCKED,
        /**
         * 无限期地等待另一个线程来执行某一特定操作的线程处于这种状态.
         */
        WAITING,
        /**
         * 等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态.
         */
        TIMED_WAITING,
        /**
         * 已退出的线程处于这种状态.
         */
        TERMINATED;
}
NEW状态表示刚刚创建的线程,这种线程还没开始执行。等到线程的start()方法调用时,才表示线程开始执行。当线程执行时,处于RUNNALE状态,表示线程所需的一切资源都已经准备好了。如果线程在执行过程中遇到了synchronized同步块,就会进入BLOCKED阻塞状态,这时线程就会暂停执行,直到获得请求的锁。WAITING和TIMED_WAITING都表示等待状态,它们的区别是WAITING会进入一个无时间限制的等待,TIMED_WAITING会进入一个有时间限制的等待。WAITING的线程是在等待一些特殊的事件。比如,通过wait()方法等待的线程在等待notify()方法,而通过join()方法等待的线程则会等待目标线程的终止。一旦等到了期望的事件,线程就会再次执行,进入RUNNABLE状态。当线程执行完毕后,则进入TERMINATED状态,表示结束。
从NEW状态出发后,线程不能再回到NEW状态,同理,处于TERMINATED的线程也不能再回到RUNNABLE状态。
线程状态图如下所示:

Java线程的状态的更多相关文章
- Java 线程的状态
		
Java Thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明: NEW 状态是指线程刚创建, 尚未启动 RUNNABLE 状态是线程正在正常 ...
 - Thread线程源码解析,Java线程的状态,线程之间的通信
		
线程的基本概念 什么是线程 现代操作系统在运行一个程序的时候,会为其创建一个进程.例如,启动一个Java程序,操作系统就会创建一个Java进程.线代操作系统调度的最小单位是线程.也叫做轻量级进程.在一 ...
 - Java线程池状态和状态切换
		
摘要 介绍线程池的五种状态RUNNING.SHUTDOWN.STOP.TIDYING和TERMINATED,并简述五种状态之间的切换. 在类ThreadPoolExecutor中定义了一个成员变量 ...
 - java多线程基础(二)--java线程各状态关系
		
注意只有可运行(就绪态)和运行中(运行态)可以相互转换
 - Java线程Thread的状态解析以及状态转换分析 多线程中篇(七)
		
线程与操作系统中线程(进程)的概念同根同源,尽管千差万别. 操作系统中有状态以及状态的切换,Java线程中照样也有. State 在Thread类中有内部类 枚举State,用于抽象描述Java线程的 ...
 - Java线程基础知识(状态、共享与协作)
		
1.基础概念 CPU核心数和线程数的关系 核心数:线程数=1:1 ;使用了超线程技术后---> 1:2 CPU时间片轮转机制 又称RR调度,会导致上下文切换 什么是进程和线程 进程:程序运行资源 ...
 - 谈谈 Java 线程状态相关的几个方法
		
http://blog.jrwang.me/2016/java-thread-states/ 发表于 2016-07-23 在 Java 多线程编程中,sleep(), interrupt(), wa ...
 - 面试官:都说阻塞 I/O 模型将会使线程休眠,为什么 Java 线程状态却是 RUNNABLE?
		
摘要: 原创出处 https://studyidea.cn 「公众号:程序通事 」欢迎关注和转载,保留摘要,谢谢! 使用 Java 阻塞 I/O 模型读取数据,将会导致线程阻塞,线程将会进入休眠,从而 ...
 - JVM探秘:jstack查看Java线程状态
		
本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. jstack命令可以打印Java进程的各个线程堆栈跟踪信息,可以用来查看Java中各个 ...
 
随机推荐
- Mysql锁机制--间隙锁的危害
			
Mysql 系列文章主页 =============== 1 准备数据 1.1 建表 DROP TABLE IF EXISTS employee; CREATE TABLE IF NOT EXISTS ...
 - 小程序敏感信息解密-java
			
/** * AES解密 * @param content 密文 * @return * @throws InvalidAlgorithmParameterException * @throws NoS ...
 - Spring boot集成swagger2
			
一.Swagger2是什么? Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格 ...
 - Lintcode393 Best Time to Buy and Sell Stock IV solution 题解
			
[题目描述] Say you have an array for which the i th element is the price of a given stock on day i. Desi ...
 - ACM FatMouse' Trade
			
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containi ...
 - JavaScript for 循环
			
循环可以将代码块执行指定的次数. JavaScript 循环 如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的. 我们可以这样输出数组的值: 一般写法: documen ...
 - Mongo Index
			
摘要 mongo 的索引非常强大,和关系型数据库索引没什么区别.这里主要介绍本人在mongo索引上的犯的错. 索引种类 1.单字段索引 2.复合索引 多个字段索引 如{name:1,address:1 ...
 - oracle11实战详解
			
因为最近可以学习oracle了,所以昨天把oracle装好了,装的时候因为种种不知名的原因,把我的mysql居然连连不上了.说实话如果自己看教程安装的话还是有一点小复杂的,特别是对于我这种学渣来说,我 ...
 - C算法实现:将字符串中的数字返回为整型数
			
今天看linux内核驱动的代码,发现一个算法写得挺简单,也有意思. 分享一下我的测试代码: #include <stdio.h> typedef int U32 ; U32 String2 ...
 - Spring+EhCache缓存实例(详细讲解+源码下载)
			
一.ehcahe的介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.Ehcache是一种广泛使用的开源Java分布式 ...