当前位置: 首页 > news >正文

java中线程的状态是如何转换的?

在 Java 中,线程有几种状态,主要包括 NEW(新建)、RUNNABLE(可运行)、BLOCKED(阻塞)、WAITING(等待)、TIMED_WAITING(计时等待)、和 TERMINATED(终止)。

以下是这些状态之间的转换:

  1. NEW(新建): 当使用 new Thread() 创建一个线程对象时,线程处于新建状态。

  2. RUNNABLE(可运行): 调用 start() 方法后,线程进入可运行状态。此时,线程调度器可以随时选择这个线程来运行。

  3. BLOCKED(阻塞): 线程在获取锁时,如果锁被其他线程占用,就会进入阻塞状态。当其他线程释放锁时,阻塞的线程重新进入可运行状态。

  4. WAITING(等待): 当线程调用 Object.wait()Thread.join()LockSupport.park() 方法时,线程进入等待状态。在等待状态下,线程需要等待其他线程的通知或中断。

  5. TIMED_WAITING(计时等待): 当线程调用带有超时参数的 Thread.sleep()Object.wait(long)Thread.join(long)LockSupport.parkNanos()LockSupport.parkUntil() 方法时,线程进入计时等待状态。在计时等待状态下,线程等待一段时间后会自动返回可运行状态。

  6. TERMINATED(终止): 线程执行完 run 方法或者发生了未捕获的异常导致线程提前终止时,线程进入终止状态。

这些状态之间的转换是由线程调度器和线程本身的操作共同决定的。例如,线程执行完 run 方法后,就会进入终止状态。阻塞状态、等待状态和计时等待状态都是由线程本身执行的一些方法引起的。不同的状态之间的切换可以通过线程的执行、等待、阻塞等操作触发。

http://www.lryc.cn/news/256145.html

相关文章:

  • 处理合并目录下的Excel文件数据并指定列去重
  • Numpy数组的去重 np.unique()(第15讲)
  • ROS-log功能区别
  • 学习git后,真正在项目中如何使用?
  • Qt国际化翻译Linguist使用
  • ShardingSphere数据分片之分表操作
  • 基于ssm鲸落文化线上体验馆论文
  • LeetCode Hot100 131.分割回文串
  • SAP UI5 walkthrough step9 Component Configuration
  • 【数据结构和算法】--- 栈
  • CentOS7.0 下rpm安装MySQL5.5.60
  • 智慧能源:数字孪生压缩空气储能管控平台
  • 【链表OJ—反转链表】
  • TCP一对一聊天
  • 基于Java的招聘系统的设计与实现
  • spring boot整合mybatis进行部门管理管理的增删改查
  • 微软 Power Platform 零基础 Power Pages 网页搭建高阶实际案例实践(四)
  • 如何在任何STM32上面安装micro_ros
  • 肖sir__ 项目讲解__项目数据
  • 微服务实战系列之J2Cache
  • 12.ROS导航模块:gmapping、AMCL、map_server、move_base案例
  • C++中string类的使用
  • LeeCode每日刷题12.8
  • 硕士毕业论文格式修改要点_word
  • 远红外温和护理,一贴缓解痛风不适
  • 优化 SQL 日志记录的方法
  • Java设计模式-工厂模式
  • 每天五分钟计算机视觉:稠密连接网络(DenseNet)
  • mysql支持的整数类型、各类型整数能够表示的数值范围
  • 我不是DBA之慢SQL诊断方式