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线程运行状态内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密功能
在Spring Boot生态中,有一个非常厉害的开源框架:Apache ShardingSphere,它是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强,今天通过这篇文章,我们一起来了解一下如何在 Spring Boot 中快速实现数据的加解密功能2024-07-07Java FileInputStream读中文乱码问题解决方案
这篇文章主要介绍了Java FileInputStream读中文乱码问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-10-10spring boot集成jasypt 并实现自定义加解密的详细步骤
由于项目中的配置文件 配置的地方过多,现将配置文件统一放到nacos上集中管理 且密码使用加密的方式放在配置文件中,配置文件的加密使用加密库jasypt,本文给大家介绍spring boot集成jasypt并实现自定义加解密,感兴趣的朋友一起看看吧2023-08-08MyBatis不同Mapper文件引用resultMap实例代码
这篇文章主要介绍了mybatis 不同Mapper文件引用resultMap的实例代码,非常不错具有参考借鉴价值,需要的朋友可以参考下2017-07-07
最新评论