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

线程生命周期

创建线程的两种方法

1.继承Thread类
2.实现Runnable接口

线程从创建到消亡分为新建、就绪、运行、阻塞、死亡5种状态。
在这里插入图片描述

新建状态

创建一个线程就处于新建状态。此时线程对象已经被分配了内存空间,并且私有数据也被初始化,但是该线程还不能运行。

就绪状态

在处于新建状态的线程中调用start()方法可以将线程状态转换成就绪状态,即启动线程。此时,线程已经得到除cpu时间之外的其他系统资源,只等待JVM的线程调度器按照线程的优先级对该线程进行调度,从而使该线程拥有获得cpu时间片的机会。

运行状态

运行状态表示线程被调度并且获得了CPU的控制权。此时会自动调用该线程对象的run()方法,并且这个线程会一直运行到结束,除非该线程主动放弃CPU的控制权或者CPU控制权被优先级更高的线程抢占。处于运行状态的线程就会让出CPU控制权。

阻塞状态

一个正在执行的线程在某些特殊情况下,可能会被人挂起,让出CPU。暂时中止执行,进入阻塞状态。例如,调用sleep()、wait()等方法,线程都将进入阻塞状态。线程阻塞时不能进入就绪队列,只有在某些事件唤醒线程后,线程才能重新进入就绪队列而处于就绪状态。

死亡状态

正常情况下,run()方法返回会使得线程终止,调用stop()方法或destory()方法也能终止线程,但不推荐使用这两个方法,因为stop()方法会使程序产生异常,而destory()方法强制终止线程,不释放内存,会造成内存泄漏。

相关文章:

  • 音频剪辑技巧:音频压缩怎么不损失质量?分享6个小妙招
  • mysql内存结构
  • UTF-8、GBK等格式互相转换 【Windows/Linux 通用】
  • 英语学习笔记25——Mrs. Smith‘s kitchen
  • 探索大模型技术:AI的未来与挑战
  • Jmeter例题分析-作业一
  • Docker部署Minio小记
  • C:技术面试总结
  • C# 实现腾讯云 IM 常用 REST API 之会话管理
  • 2024年华为OD机试真题-停车场车辆统计-C++-OD统一考试(C卷D卷)
  • 全栈式数据统计:SqlAlchemy怎样连接MsSql Server获取视图列表
  • 音视频开发5 补充 - Nginx搭建rtmp流媒体服务器,目的是让ffmpeg 可以直播推流
  • 编程实战:类C语法的编译型脚本解释器(三)插件(自定义函数)接口
  • 分享10个国内可以使用的GPT中文网站
  • Spring中的三级缓存和循环依赖
  • 玩转盲盒潮流:从0到1搭建小程序平台
  • “高考钉子户”唐尚珺决定再战2024年高考
  • 安装错误提示Please run MaterialLibrary2018.msi first或者其他MaterialLibrary版本
  • PostgreSQL用户与角色简述
  • 键盘盲打是练出来的
  • 中国体育报关注徐梦桃、王曼昱、盛李豪等获评全国先进工作者:为建设体育强国再立新功
  • 中央纪委办公厅公开通报3起整治形式主义为基层减负典型问题
  • 甘肃张掖至重庆航线开通,串起西北与西南文旅“黄金走廊”
  • 对排出黑烟车辆出具合格报告,广州南沙一检测公司被罚十万元
  • 中国经济“第一省会”广州,从传统商贸中心到直播电商第一城
  • 安徽铁塔再通报“会议室不雅行为”事件:涉事员工停职检查