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

线程生命周期

创建线程的两种方法

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

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

新建状态

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

就绪状态

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

运行状态

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

阻塞状态

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

死亡状态

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

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

相关文章:

  • 音频剪辑技巧:音频压缩怎么不损失质量?分享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用户与角色简述
  • 键盘盲打是练出来的
  • 状压dp 例题
  • 深入C++:深拷贝VS浅拷贝,编程高手必懂的技巧与陷阱
  • Spring Cloud 之 Gateway
  • 缪尔赛思又来到了你的面前(哈希)
  • 三台泵恒压供水站电控系统及PLC程序设计实例
  • 每日5题Day9 - LeetCode 41 - 45
  • git 查看远程分支地址
  • WordPress 发布了独立的 SQLite 插件
  • 阿里云oss存储直传回调服务的内网穿透
  • static的了解