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

你了解线程的状态转换吗

本文概述:
讲述线程的六种状态.
你可能已经了解了六种状态, 但是你知道 sleep 被唤醒之后, wait ()被 notify 之后进入了什么状态吗?

本文只是开胃小菜, 你看看下一篇文章对你有没有帮助.

![[Pasted image 20230308124643.png]

一共有六种状态:

  1. New 新建状态
  2. Runnable 运行状态
  3. Blocked 阻塞状态
  4. Waiting 等待状态
  5. TimedWaiting 计时等待
  6. Termiated 被终止状态

我们需要了解, 一个线程任意时刻, 只会处于一种状态.

New 创建状态

表示线程被创建, 但是没有被启动的状态. 在代码层面代表的就是 new Thread ()到调用 start ()方法之前.
当调用了 start () 方法之后, 进入 Runnable 状态

Runnable 状态

Runnable 对应的是操作系统中的两种状态, 分别是 Running 和 Ready .也就是说,Runnable 代表的不是 Running 正在运行, 而是具备运行的能力, 准备好了线程运行所需要的资源, 只要被调度就可以开始执行了

阻塞状态

注: 经常会把 Blocked,Waiting,TimeWaiting 统称为阻塞状态, 这一点要注意了.

Blocked

这里指的是进入 synchronized 保护的代码, 没有抢到 monitor 锁的情况下.
这里要疯狂注意了, 如果你对 synchronized 的三种锁有了解, 你需要注意一下这里指的是重量锁

对于阻塞状态, 比如说另一个线程释放锁了,在拿到锁的前提下, 会转为 Runnable 状态.
如果拿不到锁, 永久也不会主动恢复

Waiting 状态和 Timewaiting 状态

Waiting:
比如说 Object. wait ()方法
比如说 Thread. join ()方法
Timewaiting:
sleep ()
wait (time)
join (time)

注意啦注意啦, join 方法, 只有 join 运行的线程结束, 或者是被中断了, 才会进入 Runnable 状态.
下面的很重要, 如果 wait (方法)都是通过 notify 和 notifyAll 来唤醒的吧, 对于这两个方法是必须获取锁, 才能调用的 (仔细思考一下, 这都是 Object 中的对象), 而唤醒之后, 被唤醒的线程会进入 Blocked 状态, 他只是拥有了去抢夺锁的权力.

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

相关文章:

  • MyBatis-Plus联表查询的短板,该如何解决呢
  • 吲哚菁绿-巯基,ICG-SH,科研级别试剂,吲哚菁绿可用于测定心输出量、肝脏功能、肝血流量,和对于眼科血管造影术。
  • 深度剖析JavaOptional类
  • 平面设计软件Corel CDR2023又开始放大招啦,CorelDRAW Graphics Suite 2023有哪些新增功能?
  • 初学torch【报错:expected scalar type double but found float、rmse】
  • 金三银四、金九银十 面试宝典 JAVASE八股文面试题 超级无敌全的面试题汇总(接近3万字的面试题,让你的JAVA语法基础无可挑剔)
  • 数据结构:链式二叉树初阶
  • 公式编写1000问9-12
  • C++11:类的新功能和可变参数模板
  • 【Java学习笔记】15.Java 日期时间(1)
  • 在ROS2中,通过MoveIt2控制Gazebo中的自定义机械手
  • Java-线程池 原子性 类
  • 力扣sql简单篇练习(二十五)
  • 计算机网络:OSPF协议和链路状态算法
  • 利用表驱动法+策略模式优化switch-case
  • SpringBoot创建和使用
  • which、whereis、locate文件查找命令
  • Uipath Excel 自动化系列14-SaveExcelFile(保存Excel)
  • MyBatis学习
  • 高速PCB设计指南系列(二)
  • uniapp项目打包上线流程
  • 垃圾回收:垃圾数据如何自动回收
  • 苹果笔不用原装可以吗?Apple Pencil平替笔推荐
  • uniCloud基础使用-杂文
  • vector的模拟实现
  • 【无标题】compose系列教程-4.相对布局ConstraintLayout的使用
  • JavaEE简单示例——Bean管理
  • react+antdpro+ts实现企业级项目四:注册页面实现及useEmotionCss的介绍
  • Shifu基础功能:数据采集
  • 代码随想录算法训练营day54 | 动态规划之子序列 392.判断子序列 115.不同的子序列