java
主页 > 软件编程 > java >

Java查看线程运行状态的方法

2022-08-21 | 佚名 | 点击:

一、查看线程的运行状态

题目

线程有以下6种状态:新建、运行、阻塞、等待、计时等待和终止。

new新线程时,线程处于新建 状态。

调用start()方法时,线程处于运行状态。

当线程需要获得对象的内置锁,而该锁正被其他线程拥有,线程处于阻塞状态。

线程等待其他线程通知调度表可以运行时,该线程处于等待状态。

对于一些含有时间参数的方法,如 Thread 类的 sleep()方法,可以使线程处于计时等待状态。

当run()方法运行完毕或出现异常时,线程处于终止状态。

实现:查看线程的运行状态。

二、解题思路

创建一个类:ThreadState,实现Runnable接口

定义3个方法:

使用Thread类的getState()方法,可以获得线程的状态。

该方法的返回值是Tread.State

三、代码详解

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

package com.xiaoxuzhu;

 

/**

 * Description:

 *

 * @author xiaoxuzhu

 * @version 1.0

 *

 * <pre>

 * 修改记录:

 * 修改后版本            修改人     修改日期            修改内容

 * 2022/5/10.1      xiaoxuzhu       2022/5/10           Create

 * </pre>

 * @date 2022/5/10

 */

public class ThreadState implements Runnable {

    public synchronized void waitForASecond() throws InterruptedException {

        wait(500); // 使当前线程等待0.5秒或其他线程调用notify()或notifyAll()方法

    }

 

    public synchronized void waitForYears() throws InterruptedException {

        wait(); // 使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法

    }

 

    public synchronized void notifyNow() throws InterruptedException {

        notify(); // 唤醒由调用wait()方法进入等待状态的线程

        Thread.sleep(100);//留时间打印

    }

 

    public void run() {

        try {

            waitForASecond(); // 在新线程中运行waitForASecond()方法

            waitForYears(); // 在新线程中运行waitForYears()方法

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

    }

}

测试类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

package com.xiaoxuzhu;

 

/**

 * Description:

 *

 * @author xiaoxuzhu

 * @version 1.0

 *

 * <pre>

 * 修改记录:

 * 修改后版本            修改人     修改日期            修改内容

 * 2022/5/10.1      xiaoxuzhu       2022/5/10           Create

 * </pre>

 * @date 2022/5/10

 */

public class Test {

    public static void main(String[] args) throws InterruptedException {

        ThreadState state = new ThreadState();// 创建State对象

        Thread thread = new Thread(state);// 利用State对象创建Thread对象

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

        thread.start(); // 调用thread对象的start()方法,启动新线程

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

        Thread.sleep(100); // 当前线程休眠0.1秒,使新线程运行waitForASecond()方法

        System.out.println("计时等待:" + thread.getState());// 输出线程状态

        Thread.sleep(1000); // 当前线程休眠1秒,使新线程运行waitForYears()方法

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

        state.notifyNow(); // 调用state的notifyNow()方法

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

        Thread.sleep(1000); // 当前线程休眠1秒,使新线程结束

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

    }

 

}

原文链接:https://juejin.cn/post/71338224497071227022
相关文章
最新更新