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

Java 线程的几种状态

今天这篇文章单独说一下Java线程的几种状态

1.新建(New)
这时线程首先时被创建出来,就像我们写的代码:

Thread thread = new Thread()

这是会给这个线程分配内存空间,但还没有被操作系统调度,也不会执行run()方法.

2.可运行(Runnable)

由创建到可运行状态时,在代码中的体现是这样:

thread.start()

也就是调用了start()方法.处于这个状态的线程,会被放到可运行的线程队列中,等待CPU资源分配,一旦获得CPU时间片,线程就会开始执行run方法中的代码,但需要的是,可运行状态包括了操作系统线程状态中的就绪和运行两种情况.在Java里统一归为Runnable状态.

3.阻塞(Block)

举个例子,当用synchronized修饰代码块的时候,两个线程都要拿这个锁,当一个线程拿到锁之后,另一个线程就会陷入阻塞状态,就是产生了锁竞争,这个时候线程就会进入阻塞状态,当线程获取到锁之后又会变成可运行状态.

4.等待(Wating)

当线程调用wait这个方法的时候,需要其他线程显示将其唤醒比如notify()这个方法或者notifyAll()这个方法.当然让线程处于等待状态不仅这一种方法,还有其他的方法,就比如join()方法,简介的代码案例就像下面

Thread t = new Thread(() -> { /* 任务代码 */ });
t.start();
t.join(); // 当前线程等待t执行完毕

这里要注意t.join()这个虽然是由目标调用,但是用来阻塞执行这个函数的.可以创建两个线程,在main方法中让一个线程调用join这个方法,直到这个线程执行完毕之后,主线程才会继续向下执行,这里其实就是让主线程进入了等待状态,这个也要明白就是当主线程被唤醒后,就是转换成了可执行状态.

5.超时等待

这里的超时等待,其实就是给等待加上等待时间,等过了这个时间就会自动被唤醒,进入就绪状态,就是前面说的可执行状态,会抢占式执行.当让,也可以被其他线程主动唤醒.

6.终止

线程执行完 run 方法中的所有代码,或者因为出现未捕获的异常而异常终止,此时线程处于终止状态,生命周期结束,无法再被调度执行。无法切换到其他状态.

http://www.dtcms.com/a/395368.html

相关文章:

  • 在线ps修改图片中的文字
  • Hadoop 保姆级搭建手册:突出教程的细致和易上手
  • 使用gsettings修改命令ubuntu快捷键
  • Linux线程互斥与同步
  • 【AI扣子生成测试用例】自动生成测试用例工作流
  • Hive建表实战
  • Ethernaut Level 5: Token - 整数下溢攻击详解
  • 正向代理 vs 反向代理
  • SNN论文阅读——spikformer
  • 【论文阅读】Robix:机器人交互、推理与规划的统一模型
  • 【论文阅读】AutoDrive-R^2: 激励自动驾驶VLA模型的推理与自我反思能力
  • [UnrealEngine] 虚幻引擎UE5下载及安装(UE4、UE5)
  • AI原生安全架构的提出与落地路径:来自南凌科技的实践观察
  • ELK企业级日志分析系统
  • EasyDSS一站式点播方案如何提升企业视频门户的用户体验?
  • MARSIM仿真平台部署安装及FUEL部署-Ubuntu20.04
  • 16-留言板案例
  • ubuntu22.04配置ip
  • VMware ubuntu开机后黑屏
  • ubuntu运行项目:音乐解锁-unlock-music-master,安装依赖报错问题
  • vim操作
  • 【AI编程】四大规范驱动开发Spec工具助力AI编程从“即兴创作“向“工程化“转变
  • IDEA中print(“)输出中文乱码
  • 一站式报修软件:破解高校、物业等机构报修难题的高效方案
  • mobaxterm解决无法在vim中复制
  • 深度解析 CUDA-QX 0.4 加速 QEC 与求解器库
  • 深度解析通义DeepResearch:阿里开源的300亿参数深度研究智能体
  • 关于OpenCV无法进行h264视频转码的问题
  • KingbaseES 四维操控:索引、视图、用户与事务的实战密码
  • 大模型强化学习-PPO应用