📜  如何在Java显示所有线程状态?(1)

📅  最后修改于: 2023-12-03 15:08:55.605000             🧑  作者: Mango

如何在Java显示所有线程状态?

在Java中,我们可以使用Thread类和ThreadMXBean类来获取和显示当前所有线程的状态。

Thread类

Thread类是Java中用于创建和操作线程的一个基本类,它提供了许多有用的方法,如getName()、start()、sleep()等。其中包含了获取线程状态的方法getState()。我们可以先使用Thread类创建多个线程,并在其中执行一些任务,然后使用getState()方法获取每个线程的状态。下面是一个示例代码:

public class ThreadStatusDemo implements Runnable{

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new ThreadStatusDemo());
        Thread t2 = new Thread(new ThreadStatusDemo());

        t1.start();
        t2.start();

        while (true) {
            Thread.State stateT1 = t1.getState();
            Thread.State stateT2 = t2.getState();

            System.out.println("Thread 1 state: " + stateT1);
            System.out.println("Thread 2 state: " + stateT2);

            if (stateT1 == Thread.State.TERMINATED && stateT2 == Thread.State.TERMINATED) {
                break;
            }

            Thread.sleep(500);
        }
    }

    @Override
    public void run() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

在该示例代码中,我们创建了两个线程t1和t2,然后使用getState()方法获取它们的状态,并在控制台上输出。然后使用Thread.sleep()方法暂停主线程0.5秒,并不断循环获取线程状态,直到两个线程都终止。

ThreadMXBean类

ThreadMXBean类是Java中用于获取线程信息的一个管理接口。它可以提供线程的ID、名称、优先级、状态等信息。我们可以使用它来获取当前所有线程的信息,从而显示它们的状态。下面是一个示例代码:

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;

public class ThreadStatusDemo {

    public static void main(String[] args) {
        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
        ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds());
        for (ThreadInfo threadInfo : threadInfos) {
            System.out.println("Thread  " + threadInfo.getThreadId() + " : " + threadInfo.getThreadName() + " : " + threadInfo.getThreadState());
        }
    }
}

在该示例代码中,我们使用ManagementFactory类中的getThreadMXBean()方法获取ThreadMXBean实例,然后使用getThreadInfo()方法获取所有线程的信息。最后遍历线程信息数组,输出每个线程的ID、名称和状态。

以上就是Java中显示所有线程状态的两种方法,根据需要可以选择使用。需要注意的是,线程状态可能会在短时间内发生多次变化,因此需要适当控制获取状态的时间间隔,以便比较准确地显示线程状态。