c语言编程笔录

首页 >   > 笔记大全

笔记大全

Java线程的状态与常用方法有哪些

更新时间:2023-09-14

1. 线程的状态

在Java中,线程的状态是指线程在生命周期中所处的不同状态,可以通过Thread类中的一些方法来获取线程的状态。

Java中线程的状态包括以下几种:

  • 新建(New):当一个Thread类的实例被创建时,线程就处于新建状态。此时线程没有被启动。
  • 可运行(Runnable):一个新建的线程调用了start()方法后,线程进入可运行状态。此时线程可能正在运行,也可能正在等待系统资源。
  • 运行(Running):线程调度器选择了一个可运行的线程,线程进入运行状态。此时线程正在执行任务的代码。
  • 阻塞(Blocked):在特定情况下,线程会进入阻塞状态。比如等待某个输入、等待某个对象锁等。直到等待的条件满足后,线程才会从阻塞状态转换为可运行状态。
  • 等待(Waiting):线程执行了Object.wait()方法后,线程进入等待状态。只有等待的条件满足后,其他线程调用了notify()或notifyAll()方法,等待的线程才会被唤醒。
  • 计时等待(Timed Waiting):线程执行了Thread.sleep()或Object.wait(long timeout)方法后,线程进入计时等待状态。在指定的时间内,等待的条件满足后,线程会自动被唤醒。
  • 终止(Terminated):线程执行完了任务的代码后,线程进入终止状态。线程的生命周期到此结束。

2. 常用方法

Java提供了一些方法来获取线程的状态信息,以及控制线程的执行。

获取线程的状态信息

Thread类提供了一些方法来获取线程的状态信息,如下:

public Thread.State getState(): 返回线程的状态。
public boolean isAlive(): 判断线程是否还活着。
public boolean isInterrupted(): 判断线程是否被中断。
线程控制方法

Thread类还提供了一些方法来控制线程的执行,如下:

public void start(): 启动该线程,使其进入可运行状态。
public void run(): 线程执行体,线程被调度执行run()方法中的代码。
public void join(): 当线程A执行了线程B的join()方法后,线程A会等待线程B执行完毕后再继续执行。
public void interrupt(): 中断线程。
public void sleep(long millis): 让线程休眠指定的时间,单位是毫秒。

3. 线程状态变迁示例代码

public class ThreadStateExample {
    public static void main(String[] args) throws Exception {
        Thread thread = new Thread(() -> {
            System.out.println("线程执行...");
            try {
                Thread.sleep(1000);
                synchronized (ThreadStateExample.class) {
                    ThreadStateExample.class.notify();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        System.out.println("新建状态:" + thread.getState());
        thread.start();
        System.out.println("可运行状态:" + thread.getState());

        synchronized (ThreadStateExample.class) {
            ThreadStateExample.class.wait();
        }

        Thread.sleep(100);
        System.out.println("计时等待状态:" + thread.getState());

        thread.join();
        System.out.println("终止状态:" + thread.getState());
    }
}

上述代码演示了线程状态的变迁过程,初始状态为新建状态。当线程调用start()方法后,进入可运行状态。之后在synchronized块中调用wait()方法进入等待状态,因为该等待是有时间限制的,所以进入计时等待状态。线程执行完毕后进入终止状态。

4. 总结

线程的状态在Java中是由Thread类中的一些方法来表示的,包括新建、可运行、运行、阻塞、等待、计时等待和终止状态。线程的状态变迁可以通过Thread类中的getState()方法来获取。此外,Thread类还提供了一些常用方法来控制线程的启动、中断、休眠以及等待其他线程执行完毕等操作。

了解和掌握线程的状态及常用方法对于多线程编程非常重要,可以更好地控制线程的执行顺序和状态。通过对线程状态的了解,可以设计出更加安全可靠的多线程应用。