温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java如何查看线程运行状态

发布时间:2023-05-04 11:30:04 来源:亿速云 阅读:205 作者:zzz 栏目:编程语言

本篇内容介绍了“Java如何查看线程运行状态”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、查看线程的运行状态

题目

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

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

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

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

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

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

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

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

二、解题思路

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

定义3个方法:

  • waitForASecond():使当前线程等待0.5秒或其他线程调用notify()或notifyAll()方法

  • waitForYears() :使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法

  • notifyNow():唤醒由调用wait()方法进入等待状态的线程

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

该方法的返回值是Tread.State

三、代码详解

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();
        }
    }
}

测试类:

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());// 输出线程状态
    }

}

Java如何查看线程运行状态

“Java如何查看线程运行状态”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI