目录

前言

一、线程的几种状态

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)方法就会进入该状态。

public static void main(String[] args) throws InterruptedException {
    Thread thread = new Thread(()->{
        for (int i = 0; i < 1000_0000; i++) {
            ;
        }

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
    //线程调用start方法之前的状态:NEW
    System.out.println(thread.getState());

    thread.start();

    //线程执行执行run方法时的状态:RUNNABLE
    System.out.println(thread.getState());

    //线程按照一定时间阻塞的状态:TIMED_WAITING
    Thread.sleep(1000);
    System.out.println(thread.getState());

    thread.join();
    //线程执行完run方法销毁后的状态:TERMINATED
    System.out.println(thread.getState());
}

代码运行结果:

java 进程是否启动 java进程的几种状态_System

 

5、WATING

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

6、BLOCKED

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

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

二、线程之间的转换

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

java 进程是否启动 java进程的几种状态_java_02