• Java中线程的六种状态


    目录

    前言

    一、线程的几种状态

    1、NEW

    2、TERMINATED

    3、RUNNABLE

    4、TIMED_WATING

    5、WATING

    6、BLOCKED

    二、线程之间的转换


    前言

            在操作系统中,每个进程至少有一个线程,而每一个线程对应一个PCB,PCB有一个叫做“进程状态”的属性,用来描述当前PCB的状态。但是在Java中,有一套独立的线程状态规则。

    一、线程的几种状态:

            Java中的线程分为以下六种状态,通过线程对象调用getState()方法来获取线程的当前状态。

    1、NEW

            这个状态表示:创建了Thread对象,但还没调用start方法,此时系统上还没真正创建线程。

    2、TERMINATED

            表示线程执行完run方法的任务后销毁了,但Thread对象还在的状态。 

    3、RUNNABLE

            表示就绪状态:线程正在CPU上执行run方法的任务,或者在就绪队列中排队。

    4、TIMED_WATING

            表示线程正在按照一定的时间进行阻塞,调用sleep或者join(time)方法就会进入该状态。

    1. public static void main(String[] args) throws InterruptedException {
    2. Thread thread = new Thread(()->{
    3. for (int i = 0; i < 1000_0000; i++) {
    4. ;
    5. }
    6. try {
    7. Thread.sleep(2000);
    8. } catch (InterruptedException e) {
    9. e.printStackTrace();
    10. }
    11. });
    12. //线程调用start方法之前的状态:NEW
    13. System.out.println(thread.getState());
    14. thread.start();
    15. //线程执行执行run方法时的状态:RUNNABLE
    16. System.out.println(thread.getState());
    17. //线程按照一定时间阻塞的状态:TIMED_WAITING
    18. Thread.sleep(1000);
    19. System.out.println(thread.getState());
    20. thread.join();
    21. //线程执行完run方法销毁后的状态:TERMINATED
    22. System.out.println(thread.getState());
    23. }

    代码运行结果:

    5、WATING

            特殊的阻塞状态,调用wait或者join()方法就会进入该状态。

    6、BLOCKED

            等待锁的时候进入的阻塞状态,调用synchronized方法就会进入该状态。

            综上,线程在运行时其实就两种状态:就绪状态和阻塞状态(根据阻塞的原因分成4、5、6三种具体情况)。

    二、线程之间的转换

            线程通过调用特定的方法,可以在就绪状态和阻塞状态之间来回转换:

  • 相关阅读:
    大白话带你认识 Kafka,背后原理如此简单
    JavaSE面试题04:成员变量与局部变量
    报错解决:pandas的依赖项openpyxl
    【JavaWeb】FilterConfig应用示例
    SpringBoot测试类
    Qt中显示摄像头数据(V4L2三)
    pdf怎么转换成dwg格式?简单转换方法分享
    主流跨域方式解析!
    Golang抓包:实现网络数据包捕获与分析
    灾备建设中的网络传输
  • 原文地址:https://blog.csdn.net/m0_67683346/article/details/126441666