JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java 线程的状态

wys521 2024-11-18 17:59:51 精选教程 28 ℃ 0 评论

在Java并发编程中,了解线程的状态是至关重要的,它可以帮助我们理解线程在执行过程中的各种行为和转换。

一、线程的生命周期和状态含义

Java线程的生命周期可以分为六个状态:新建(New)、可运行(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)和终止(Terminated)。下面是各个状态的含义:

  1. 新建(New):线程对象被创建,但还没有调用start()方法启动线程。
  2. 可运行(Runnable):线程已经调用start()方法启动,等待系统分配执行资源。
  3. 运行(Running):线程正在执行任务。 { 这个状态比较特殊没有对应状态变量
  4. 阻塞(Blocked):线程因为某种原因(如等待锁、等待输入输出等)而暂停执行。
  5. 等待(Waiting):线程因为某种原因(如调用了wait()方法)而主动等待。
  6. 计时等待(TIMED_WAITING):线程等待指定时间,可以自动唤醒或等待时间结束后自动恢复。
  7. 终止(Terminated):线程执行完任务或因异常退出。

示例代码:

public class ThreadStateExample {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            // 执行任务
        });

        System.out.println("线程状态:" + thread.getState());  // 输出状态为NEW

        thread.start();
        System.out.println("线程状态:" + thread.getState());  // 输出状态为RUNNABLE

        Thread.sleep(1000);
        System.out.println("线程状态:" + thread.getState());  // 输出状态为TERMINATED
    }
}

在这个示例中,我们创建了一个新线程,并在其中执行一个任务。通过调用Thread.getState()方法,我们可以获取线程的状态并进行输出。

输出结果:

线程状态:NEW
线程状态:RUNNABLE
线程状态:TERMINATED

二、线程状态的转换

  1. 线程状态的转换规则:线程状态的转换是由系统和线程之间的相互作用所决定的。下表展示了各个状态之间的转换规则:

表格示例:线程状态的转换规则

当前状态

转换条件

目标状态

NEW

调用start()方法

RUNNABLE

RUNNABLE

被系统调度执行

RUNNING {Java的线程状态还是RUNNABLE}

RUNNABLE

暂停执行(如等待锁、等待输入输出等)

BLOCKED

RUNNABLE

主动等待(如调用了wait()方法)

WAITING

BLOCKED

获得锁

RUNNABLE

WAITING

获得唤醒通知(如调用了notify()或notifyAll()方法)

RUNNABLE

TIMED_WAITING

等待超时结束(如调用了带有超时参数的wait()方法)

RUNNABLE

RUNNING

执行完任务

TERMINATED

RUNNING

发生异常

TERMINATED


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表