Java线程生命周期

image

java.lang.Thread类包含一个静态枚举,它定义了它的潜在状态。在任何给定的时间点内,线程只能处于以下状态之一:

  • NEW – 一个新创建的线程,尚未开始执行
  • RUNNABLE – 正在运行或准备执行,但它正在等待资源分配
  • BLOCKED – 等待获取监视器锁以进入或重新进入同步块/方法
  • WAITING – 等待其他线程执行特定操作,无任何时间限制
  • TIMED_WAITING – 等待其他线程在指定时间段内执行特定操作
  • TERMINATED – 已完成执行

NEW

创建后还没有执行start()方法的线程所处的状态

    public static void main(String[] args) {
        Thread t = new Thread(() -> {});
        System.out.println(t.getState());
    }

RUNNABLE

执行start()方法后

    public static void main(String[] args) {
        Thread t = new Thread(() -> {});
        t.start();
        System.out.println(t.getState());
    }

BLOCKED

public class test3 {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(test3::func);
        Thread t2 = new Thread(test3::func);
        t1.start();
        t2.start();
        Thread.sleep(1000);
        System.out.println(t2.getState());
    }
    
    public static synchronized void func() {
        while(true) {

        }
    }
}

WAITING

比如,线程1创建线程2并执行,如果t1线程执行t2.join(),那么在t2完成前,t1的状态就是waiting

Timed Waiting

当线程等待另一个线程在规定的时间内执行特定操作时,该线程处于TIMED_WAITING状态。

根据JavaDocs,有五种方法可以将线程置于TIMED_WAITING状态:

  • thread.sleep(long millis)
  • wait(int timeout) 或 wait(int timeout, int nanos)
  • thread.join(long millis)
  • LockSupport.parkNanos
  • LockSupport.parkUntil
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                System.out.println("Thread interrupted");
            }
        });
        t1.start();
        Thread.sleep(1000);
        System.out.println(t1.getState());
    }

TERMINATED

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(()->{});
        t1.start();
        Thread.sleep(1000);
        System.out.println(t1.getState());
    }
posted @ 2023-01-04 13:58  antidogmatist  阅读(50)  评论(0编辑  收藏  举报