首页 > 编程语言 >2024java最新面试题-10张图!彻底搞定Java线程状态转换

2024java最新面试题-10张图!彻底搞定Java线程状态转换

时间:2024-10-12 23:46:18浏览次数:8  
标签:10 面试题 Java 状态 long 线程 就绪 等待

Java线程状态有几个?Java线程状态是如何转换?Java线程状态转换什么情况会进入锁的等待队列?Java线程状态转换什么情况会进入锁的同步队列?

一提到Java线程状态,不少读者立马想到线程状态转换图,但细想,印象又不深刻,只记得有那么几个状态。再要你说出Java线程状态是如何转换的,脑子里可能就如下图一样,已经是一团浆糊了。
在这里插入图片描述

新建状态(New)我们可以通过实现Runnable接口或继承Thread声明一个线程类,new一个实例后,线程就进入了新建状态。一个刚诞生的线程,处于新建状态。

在这里插入图片描述

就绪状态(Ready)线程对象创建成功后,调用该线程的start()函数,线程进入就绪状态,该状态的线程进入可运行线程池中,等待获取C P U的使用权。
在这里插入图片描述

运行状态(Running)

此时线程调度程序正在从可运行线程池中选择一个线程,该线程进入运行状态。换句话说,线程获取到了C P U时间片。还没完呢,当线程时间片用完或调用的yield()函数,该线程回到就绪状态。作为一名运气好的线程,我进入了运行状态,但是运气用完了,我还得回到就绪状态。

在这里插入图片描述

终止状态(Terminated)线程继续运行,直到执行结束或执行过程中因异常意外终止都会使线程进入终止状态。线程一旦终止,就不能复生,这是不可逆的过程。
在这里插入图片描述

等待状态(Waiting)运行状态的线程执行wait()、join()、LockSupport.park()任意函数,该线程进入等待状态。其中wait()与join()函数会让J V M把该线程放入锁等待队列。处于这种状态的线程不会被分配C P U执行时间,它们要等待被主动唤醒,否则会一直处于等待状态。如果我们要唤醒线程怎么办呢?执行LockSupport.unpark(t)函数唤醒指定线程,该线程回到就绪状态。而通过notify()、notifyAll()、join线程执行完毕方式,会唤醒锁等待队列的线程,出队的线程回到就绪状态。
在这里插入图片描述

超时等待状态(Timed waiting)超时等待与等待状态一样,唯一的区别就是多了超时机制,不会一直等待被其他线程主动唤醒,而是到达指定时间后会自动唤醒。以下函数会触发进入超时等待状态wait(long)join(long)LockSupport.parkNanos(long)LockSupport.parkUtil(long)sleep(long)其中wait(long)、join(long)函数会让J V M把线程放入锁等待队列。后面的唤醒剧情就和等待状态如出一辙,就多了超时时间到了,自动唤醒的动作。
在这里插入图片描述

阻塞状态(Blocked)运行状态的线程获取同步锁失败或发出I/O请求,该线程进入阻塞状态。如果是获取同步锁失败J V M还会把该线程放入锁的同步队列。
同步锁被释放时,锁的同步队列会出队所有线程,进入就绪状态。I/O处理完毕时,该线程重新回到就绪状态。
在这里插入图片描述

更多最新最全java面试学习资料(持续更新中。。。):
https://pan.quark.cn/s/236eda5a3dc2

在这里插入图片描述

标签:10,面试题,Java,状态,long,线程,就绪,等待
From: https://blog.csdn.net/2401_87189717/article/details/142891510

相关文章

  • 2024.10.12
    根据你提供的MyBatis配置文件,确实有一个小问题需要注意:驼峰命名配置你已将mapUnderscoreToCamelCase设置为注释(<!--<settingname="mapUnderscoreToCamelCase"value="true"/>-->),这意味着驼峰命名转换功能被禁用了。为了启用它,你需要取消注释并确保该设置的值为true。修......
  • 代码随想录Day24 | LeetCode 122. 买卖股票的最佳时机 II、LeetCode 55. 跳跃游戏、Le
    LeetCode122.买卖股票的最佳时机IIclassSolution:defmaxProfit(self,prices:List[int])->int:res=0foriinrange(1,len(prices)):res+=max(0,prices[i]-prices[i-1])returnresLeetCode55.跳跃游戏class......
  • JavaScript中的流程控制(顺序结构、分支结构、循环结构)
    流程控制1.概念在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的,很多时候要通过控制代码的执行顺序来实现我们完成的功能简单的理解:流程控制就是控制代码,按照一定的结构顺序来执行流程控制的分类:顺序结构分支结构循环结构2.顺序流程控......
  • 每日OJ题_牛客_比那名居的桃子_滑动窗口/前缀和_C++_Java
    目录牛客_比那名居的桃子_滑动窗口/前缀和题目解析C++代码Java代码牛客_比那名居的桃子_滑动窗口/前缀和比那名居的桃子(nowcoder.com)描述:        小红有一天看到了一只桃子,由于桃子看上去就很好吃,小红很想把它吃掉。已知吃下桃子后,每天可以获得ai​的......
  • 【论文速看】DL最新进展20241011-3D雷达、目标检测、大核CNN
    目录【3D雷达】【目标检测】【CNN】【3D雷达】[ECCV2024]BetterCallSAL:TowardsLearningtoSegmentAnythinginLidar论文链接:https://arxiv.org/pdf/2403.13129代码链接:https://github.com/nv-dvl/segment-anything-lidar文中提出了SAL(Lidar中的任意......
  • 20241012 mysql查漏补缺
    2024/10/12mysql查漏补缺1.联合索引什么时候会失效[联合索引]遵循最左前缀法则NO1​ 如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效​ 对于最左前缀法则指的是,查询时,最左边......
  • 基于springboot的蔬菜农场信息管理系统java项目商城销售系统
    基于Java和SpringBoot的蔬菜农场信息管理系统是为了实现蔬菜农场的现代化、高效化管理而设计的。该系统在种植管理方面,可详细记录蔬菜的种植信息,包括蔬菜品种、种植日期、种植区域、种植方法等,方便农场工作人员对种植过程进行精准把控。生长监测模块能实时记录蔬菜的......
  • 基于java+springboot的书洞小程序设计图书阅读交流分享系统
    基于Java和SpringBoot的书洞小程序是一款为阅读爱好者打造的便捷图书交流与分享平台。该小程序在图书资源展示方面丰富多样,用户可以浏览各类图书的详细信息,包括书名、作者、出版社、出版年份、书籍简介等,同时配有书籍封面图片,让用户能更直观地了解图书内容。社交互动......
  • 如何在 IDEA 中导入 Java 项目的 Git 仓库并启动
    目录前言1.从Git仓库导入Java项目2.配置Maven2.1配置Maven仓库和设置文件2.2加载依赖3.配置Tomcat并运行项目3.1配置Tomcat3.2配置ServerURL3.3启动项目4.常见问题与解决方法4.1Maven依赖无法下载4.2Tomcat部署失败4.3项目启动后无法访问结......
  • 第109天:免杀对抗-PowerShell&混淆&分离加载&特征修改&EXE生成&填充替换
    知识点知识点:1、Powershell-对变量数据做文章2、Powershell-对Shellcode做文章3、Powershell-对执行代码特征做文章章节点:编译代码面-ShellCode-混淆编译代码面-编辑执行器-编写编译代码面-分离加载器-编写程序文件面-特征码定位-修改程序文件面-加壳花指令-资源代码......