21xrx.com
2024-11-05 22:48:12 Tuesday
登录
文章检索 我的文章 写文章
我在学习Java多线程编程的时候
2023-06-17 14:07:24 深夜i     --     --

我在学习Java多线程编程的时候,发现线程有很多种状态。在这篇文章中,我将介绍Java线程的几种状态以及它们之间的转换。

Java线程的几种状态:

1. 新建状态(New):当一个线程对象被创建时,它处于新建状态。此时,JVM为该线程分配了内存空间,但线程还没有开始执行。

2. 就绪状态(Runnable):当线程处于就绪状态时,它已经准备好执行,等待CPU的调度。

3. 运行状态(Running):线程进入运行状态后,它开始执行线程代码。

4. 阻塞状态(Blocked):线程在某些情况下会进入阻塞状态,例如访问一个同步方法或等待输入/输出操作完成。在这种状态下,线程暂停执行,等待某些条件的发生。

5. 等待状态(Waiting):线程在某些情况下会进入等待状态,例如调用wait()方法时。在这种状态下,线程会一直等待某些条件的发生,直到其他线程唤醒它。

6. 超时等待状态(Timed Waiting):线程在调用wait(long timeout)、sleep(long millis)或join(long millis)方法时会进入超时等待状态。在这种状态下,线程会等待指定的时间,然后自动恢复到就绪状态。

7. 终止状态(Terminated):当线程执行完毕或出现异常时,它会进入终止状态。

代码示例:


public class ThreadStateDemo extends Thread {

  

  @Override

  public void run() {

    System.out.println("线程执行开始!");

    try {

      sleep(5000);

    } catch (InterruptedException e) {

      e.printStackTrace();

    }

    System.out.println("线程执行结束!");

  }

  

  public static void main(String[] args) {

    ThreadStateDemo thread = new ThreadStateDemo();

    System.out.println("线程状态:" + thread.getState());

    thread.start();

    System.out.println("线程状态:" + thread.getState());

    try {

      sleep(1000);

    } catch (InterruptedException e) {

      e.printStackTrace();

    }

    System.out.println("线程状态:" + thread.getState());

    try {

      thread.join();

    } catch (InterruptedException e) {

      e.printStackTrace();

    }

    System.out.println("线程状态:" + thread.getState());

  }

}

首先,创建了一个继承自Thread的线程类ThreadStateDemo,重写了run()方法,在其中模拟线程执行5秒钟的操作。

在main()方法中,创建了一个线程对象thread,并输出了它的状态。此时,线程处于新建状态。

通过线程start()方法启动线程后,再次输出线程状态,此时线程处于就绪状态。

等待1秒后,再次输出线程状态,此时线程处于运行状态。

最后,通过线程join()方法,等待线程执行结束后,再次输出线程状态,此时线程处于终止状态。

综上所述,Java线程的几种状态包括新建状态、就绪状态、运行状态、阻塞状态、等待状态、超时等待状态和终止状态,它们之间的转换取决于线程的执行状态以及外部因素的干扰。熟悉线程状态对于Java多线程编程是非常重要的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复