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

作者:小虚竹and掘金 时间:2023-05-23 12:21:10 

一、查看线程的运行状态

题目

线程有以下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    xiaoxuzhu2022/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    xiaoxuzhu2022/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查看线程运行状态的方法详解

来源:https://juejin.cn/post/7133822449707122702

标签:Java,线程,运行,状态
0
投稿

猜你喜欢

  • SpringCloud启动失败问题汇总

    2021-07-28 02:45:51
  • 如何让C#、VB.NET实现复杂的二进制操作

    2023-10-14 19:22:52
  • Android App实现应用内部自动更新的最基本方法示例

    2022-11-02 02:49:46
  • unity shader实现玻璃折射效果

    2022-04-16 08:22:36
  • Java创建随机数的四种方式总结

    2022-05-11 10:29:17
  • WPF自定义控件和样式之自定义按钮(Button)

    2022-04-09 14:39:32
  • Android中自定义ImageView添加文字设置按下效果详解

    2021-10-08 08:13:14
  • C#统计字符串里中文汉字个数的方法

    2022-05-12 21:47:10
  • MyBatis根据条件批量修改字段的方式

    2023-12-16 03:24:01
  • java实现电话本系统

    2021-06-05 20:39:39
  • Java基于JDK 1.8的LinkedList源码详析

    2021-07-15 03:29:26
  • 详解Spring Boot加载properties和yml配置文件

    2023-11-24 07:14:09
  • 浅谈java内存管理与内存溢出异常

    2022-04-22 15:03:18
  • Android仿微信雷达扫描效果的实现方法

    2022-07-28 01:49:17
  • android 网络请求库volley方法详解

    2022-01-01 01:34:30
  • Android 滑动返回Activity的实现代码

    2023-12-09 22:56:58
  • SpringBoot Bean被加载时进行控制

    2022-10-01 14:06:53
  • 改进c# 代码的五个技巧(一)

    2021-07-17 23:49:30
  • Android程序启动时出现黑屏问题的解决方法

    2022-07-06 05:16:39
  • 剑指Offer之Java算法习题精讲链表专项训练

    2023-11-29 16:31:48
  • asp之家 软件编程 m.aspxhome.com