首页 > 编程语言 >[深入理解Java虚拟机]线程

[深入理解Java虚拟机]线程

时间:2024-07-15 20:53:32浏览次数:16  
标签:状态 Java 等待 虚拟机 唤醒 线程 Timeout 方法

状态转换

Java语言定义了6种线程状态,在任意一个时间点中,一个线程只能有且只有其中的一种状态,并且可以通过特定的方法在不同状态之间转换。这6种状态分别是:

  • 新建(New):创建后尚未启动的线程处于这种状态,
  • 运行(Runnable):包括操作系统线程状态中的Running和Ready,也就是处于此状态的线程有可能正在执行,也有可能正在等待着操作系统为它分配执行时间
  • 无限期等待(Waiting):处于这种状态的线程不会被分配处理器执行时间,它们要等待被其他线程显式唤醒。以下方法会让线程陷入无限期的等待状态:
    • 没有设置Timeout参数的Object::wait()方法:
    • 没有设置Timeout参数的Thread::join()方法:
    • LockSupport::park()方法。
  • 限期等待(Timed Waiting):处于这种状态的线程也不会被分配处理器执行时间,不过无须等待被其他线程显式唤醒,在一定时间之后它们会由系统自动唤醒。以下方法会让线程进入限期等待状态:
    • Thread::sleep()方法:
    • 设置了Timeout参数的Object::wait()方法:
    • 设置了Timeout参数的Thread::join()方法;
    • LockSupport::parkNanos(方法:
    • LockSupport::parkUntil()方法。
  • 阻塞(Blocked):线程被阻塞了,“阻塞状态”与“等待状态”的区别是“阻塞状态”在等待着获取到个排它锁,这个事件将在另外一个线程放弃这个锁的时候发生;而“等待状态”则是在等待一段时间,或者唤醒动作的发生。在程序等待进入同步区域的时候,线程将进入这种状态。
  • 结束(Terminated):已终止线程的线程状态,线程已经结束执行。
    上述6种状态在遇到特定事件发生的时候将会互相转换,它们的转换关系如图12-6所示。

image

标签:状态,Java,等待,虚拟机,唤醒,线程,Timeout,方法
From: https://www.cnblogs.com/DCFV/p/18303939

相关文章

  • javap和字节码
    javap字节码的基本信息publicclassTest{privateintage=10;publicintgetAge(){returnage;}}在class文件的同级目录下输入命令javap-v-pTest.class来查看一下输出的内容//字节码文件的位置Classfile/D:/Code/code/JavaCod......
  • Java——N以内累加求和
    2024/07/151.题目2.错误3.分析4.答案1.题目2.错误importjava.util.Scanner;publicclassMain{ publicstaticvoidmain(String[]args){ Scannerscanner=newScanner(System.in); intN=scanner.nextInt(); intsum=0; while(N<=1000){ for(......
  • 学习Java的第二周
    本该周六晚之前发表的第二次博客...因为自己也出了意外进了急诊拖到现在,先在这里致歉...黑马网课看了将近三十个课时了,目前感觉良好,越看越学越有兴趣。对于我这种0基础的小菜来说,初学时不应该追求深度,而应该去追求广度。从基础语法(方法、判断和循环、数组等)到面向对象,API、字符......
  • 基于Java+ Java Swing Mysql 实现的学生宿舍管理系统设计与实现
    一、前言介绍:1.1项目摘要随着高校招生规模的不断扩大,学生宿舍管理面临着越来越多的挑战。传统的学生宿舍管理方式往往依赖于人工记录、纸质档案和口头通知,这种方式不仅效率低下,而且容易出错,给宿舍管理带来了诸多不便。因此,开发一套高效、便捷、准确的学生宿舍管理系统成......
  • 基于Java+Ssm+Mysql实现的Java Web酒店管理项目系统设计与实现
    一、前言介绍:1.1项目摘要随着信息技术的快速发展和互联网的普及,传统酒店行业面临着转型升级的压力。为了提高酒店的经营管理水平,提升客户体验,酒店管理系统应运而生。酒店管理系统通过整合酒店内部资源,实现信息的快速传递和处理,为酒店提供了高效、便捷的管理手段。课题“......
  • JAVA之File操作
    目录File教程一、file基本操作创建File类对象2.File类中判断功能的方法3.file类的创建功能的方法4.File类中的遍历功能5.file类中常用的方法6.file中文件权限操作的方法File教程一、file基本操作创建File类对象/***创建File类对象*路径分......
  • 高并发多线程大数据批处理任务工具类设计
    多线程大数据批处理任务工具类设计:多线程企业级使用,100%上线程池,问题来了,线程池你怎么配?怎么用?如何保证不丢包?怎么确认全部包裹或数据全部下发完成了?方便你统计或者重试如何做到通用?这次发优惠卷,下次可以复用发短信/二维码/验证码等。一、线程池参数问题​ 为了简化......
  • JavaAPI练习(1) (2024.7.15)
        Math类packageMathExercise20240715;//Math类所在的是java.lang包,属于核心包,无需导包publicclassMathExercise{publicstaticvoidmain(String[]args){//Math方法为静态的,不需要创建对象,直接类名调用即可//abs返回参数的绝对......
  • javaSE学习 day04
    目录1.数组1.1数组是什么1.2静态数组1.2.1数组的格式1.2.2数组的访问1.2.3获取数组的长度1.3动态数组1.3.1动态数组是什么1.3.2动态数组的格式 1.3.3默认值规则1.4数组的遍历1.4.1什么是数组的遍历1.4.2为什么要遍历1.4.3遍历的格式1.5综合案例1.5.1计算班级......
  • javaScript基础讲解
     Javascript1.基本语法入门<head>  <metacharset="UTF-8">  <title>Title</title>  /*Javascript严格区分大小写*/  <script>    varscore=62;    if(score>60&&score<70){      alert("67"......