首先需要说明的是,所指状态为JVM线程状态,而非操作系统线程状态。同一时间,一个线程只会存在于一种状态。

线程状态,enum State:

1、NEW

已创建,未运行。

2、RUNNABLE

线程于JVM中运行中。

3、BLOCKED

阻塞等待 monitor lock 以进入或重新进入 synchronized 同步块或方法,由Object.wait 触发。

4、WAITING

触发方法: Object.wait、join()、 LockSupport.park

等待另外的线程执行完特定的任务。

例如:
线程执行Object.wait,等待另一线程执行完,并通过执行Object.notify 或者 Object.notifyAll来唤醒以继续执行;

线程执行Thread.join,等待特定线程执行完毕。

5、TIMED_WAITING

时限等待。

触发方法:Thread.sleep、Object.wait(timeout)、Thread.join(timeout)、LockSupport.parkNanos、LockSupport.parkUntil。

6、TERMINATED

已执行完任务的线程状态。

附注:

1、线程 Thread.getState 方法获取当前线程状态。此方法是涉及用来监控系统状态,而不是用于同步控制。

2、Unsafe.park方法挂起线程。

3、Thread.join 方法内部通过循环调用Object.wait方法来实现等待。

4、BLOCKED 状态强调是为了进入同步逻辑而等待。

关于Java 线程的运行状态的更多相关文章

  1. 干货 | 教你如何监控 Java 线程池运行状态

    之前写过一篇 Java 线程池的使用介绍文章<线程池全面解析>,全面介绍了什么是线程池.线程池核心类.线程池工作流程.线程池分类.拒绝策略.及如何提交与关闭线程池等. 但在实际开发过程中, ...

  2. 干货:教你如何监控 Java 线程池运行状态

    之前写过一篇 Java 线程池的使用介绍文章<线程池全面解析>,全面介绍了什么是线程池.线程池核心类.线程池工作流程.线程池分类.拒绝策略.及如何提交与关闭线程池等. 但在实际开发过程中, ...

  3. 【JAVA并发第二篇】Java线程的创建与运行,线程状态与常用方法

    1.线程的创建与运行 (1).继承或直接使用Thread类 继承Thread类创建线程: /** * 主类 */ public class ThreadTest { public static voi ...

  4. Java线程的概念

    1.      计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行:当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了. 缓 ...

  5. Java 线程池框架核心代码分析--转

    原文地址:http://www.codeceo.com/article/java-thread-pool-kernal.html 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和 ...

  6. java线程(2016-4-7)

    Thread.yield()的调用是对线程调度器(Java线程机制的一部分,可以将CPU从一个线程转移到另一个线程)的一种建议,它在声明:"我已经执行完生命周期中最重要的部分了,此刻正是切换 ...

  7. Java 线程的转换及状态

    线程的状态转换是线程控制的基础. 线程状态总的可分为五大状态:分别是生.死.可运行.运行.等待/阻塞.用一个图来描述如下: 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnabl ...

  8. java线程池

    http://cuisuqiang.iteye.com/blog/2019372 Java四种线程池的使用 java线程线程池监控 Java通过Executors提供四种线程池,分别为:newCach ...

  9. Java线程:概念与原理

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  10. Java线程:线程状态的转换

    Java线程:线程状态的转换   一.线程状态   线程的状态转换是线程控制的基础.线程状态总的可分为五大状态:分别是生.死.可运行.运行.等待/阻塞.用一个图来描述如下:   1.新状态:线程对象已 ...

随机推荐

  1. golang获取windows版本和详细信息

    场景: 将木马丢到感染机运行后回连时希望返回感染机的操作系统信息.golang 可以通过runtime.OS获取到操作系统类型,但是无法获取详细的版本信息,如win7 win10等, 解决方案; 下面 ...

  2. win32 - Rendering a Stream示例

    仅供参考 文档: Rendering a Stream 代码示例: #include <cstdio> #include <Windows.h> // Windows mult ...

  3. win32 - WM_DROPFILES的用法

    WM_DROPFILES: 当用户将文件拖放到已注册为丢弃文件的接收者的应用程序窗口中时发送该消息 我们可以利用这个消息获取文件名称,并将它们保存到容器里. LRESULT CALLBACK Stat ...

  4. macOS使用CodeRunner快速配置fortran环境

    个人网站:xzajyjs.cn 由于一些项目的缘故,需要有fortran的需求,但由于是M1 mac的缘故,不能像windows那样直接使用vs+ivf这种经典配置.搜了一下网上主流的跨平台方案,主要 ...

  5. 小程序中用css修改svg的颜色

    记一下(#^.^#) <div class="svg"> <img src="./firefox-logo.svg" class=" ...

  6. m1芯片mac安装homebrew

    安装 ARM 版 Homebrew ARM版Homebrew最终被安装在/opt/homebrew路径下. 直接执行: /bin/bash -c "$(curl -fsSL https:// ...

  7. 【Azure API 管理】API Management 访问限制策略[quota-by-key] 中参数 [renewal-period] 的实验和理解

    quota-by-key 策略允许根据密钥强制实施可续订或有生存期的调用量和/或带宽配额. 密钥的值可以是任意字符串,通常使用策略表达式来提供密钥. 可以添加可选增量条件,指定应在配额范围内的请求. ...

  8. 【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置

    问题描述 问题一:Redis服务,如何可以做到仅允许特定的子网内的服务器进行访问? 问题二:Redis服务,timeout和keepalive的设置是怎样的?是否可以配置成timeout 0? 问题三 ...

  9. 关于STM32Fx部分引脚不可以正常输出高低电平的解决办法(不可以正常使用)

    一.概述 在一次电路版测试中,发现stm32的部分引脚不可以正常的输出高低电平,刚开始以为是板子没有焊接好所以导致的经过多次的测试,发现电路版没问题.当时就想不清楚了,后面就问学长,还有实验室的学长一 ...

  10. 网络流与各种建模(I)

    网络流与各种建模(I) 网络流基础 这里默认读者学习过网络流和MCMF,这里仅作复习 网络流解决的问题是给一个源点和汇点,每个边有最大流量,最大化从源点放水到汇点的速率. 网络流的时间复杂度是 \(O ...