• 线程的状态


    线程的状态

    本文将以图文的形式来对线程的状态进行说明。(要注意的是,这里我们说明的是jvm所描述的线程六种状态)请看下图:>

    在这里插入图片描述

    这是java帮助手册中给出的线程六种状态,我们一个一个来对其进行介绍。

    1.new 状态

    new状态是我们线程已经创建了,但是还没有start的一种状态。也就是说,我们给线程安排好了工作,但是还没有执行,用代码来看大概是这样的:

    在这里插入图片描述

    注意看,这里我们将线程t1创建好,但是并没有调用start方法去执行它,此时线程的状态,就处在new状态,我们让程序运行起来:>

    在这里插入图片描述

    2.RUNNABLE状态

    从NEW状态到RUNNABLE状态只需要线程调用start方法。要注意的是:

    线程调用start方法不一定立即到cpu上面执行,它需要在就绪队列中等待操作系统的调度。

    笼统的说,RUNNABLE状态描述一个线程正在运行或已经在就绪队列,随时可以到CPU上面去执行。

    在一些书上,线程的RUNNABLE状态也可以细分为两种状态,一种是READY状态,一种是RUNNING状态。

    READY状态即表示线程正在就绪队列中等待调度,RUNNING状态则表示了线程正在CPU上运行。

    请看下面代码:>

    在这里插入图片描述

    这里我们让程序运行起来:>
    在这里插入图片描述

    可以看到线程已经转变为Runnable状态了。

    3.TERMINATED状态

    Terminated状态代表线程已经执行完成,这里我们仍用代码来演示一下:>

    在这里插入图片描述

    这里我们在前面的基础上调用了join方法,等待线程t1执行完成后,我们再去打印线程t1的状态。我们来看一下代码运行的结果
    在这里插入图片描述

    4.BLOCKED状态

    BLOCKED意味着线程阻塞,而且是在竞争锁的过程中导致的阻塞,这里涉及到了关键字synchronized。

    5.TIME_WAITING状态

    TIME_WAITING状态也意味着线程进入阻塞状态,但这里涉及到的方法是sleep,当一个线程调用sleep方法时,此时该线程就会进入TIME_WAITING状态,请看以下代码:>

    在这里插入图片描述

    这里可以看到我们在线程t1中调用了sleep方法,然后我们在主线程中先休眠再去打印t1的状态,此时我们可以得到:>

    在这里插入图片描述

    6.WAITING状态。

    WAITING状态也是线程的一种阻塞状态,主要是由于线程调用了wait方法而进入的一种阻塞状态。请看以下代码:>

    在这里插入图片描述

    在这里我们创建了两个线程,一个线程t1,一个线程t2,并且在线程t1中调用了wait方法,此时线程t1进入WAITING状态。在等待我们输入一个值之后,t2线程才对t1的wait进行通知唤醒。我们运行程序可以得到

    在这里插入图片描述

    以上就是我们线程的六种状态了,我们画一个图来进行总结。

    在这里插入图片描述

    谢谢观看!!。

  • 相关阅读:
    基于Java的计算机机房作业管理系统(Vue.js+SpringBoot)
    【Java系列】ArrayList
    关于电子商务电商供应链项目,不得不说的开放平台电商API接口
    【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
    c++day8
    还在拿flex进行布局吗?快来试试grid网格布局吧
    双向链表的实现(增删查改)——最好理解的链表
    Java实现WebSocket客户端和服务端(简单版)
    网页中F5刷新与ctrl + F5强制刷新的区别?
    深入React源码揭开渲染更新流程的面纱
  • 原文地址:https://blog.csdn.net/LIn_jt/article/details/126088392