第67题JAVA高级技术-多线程1(查看线程的运行状态)
Posted 小虚竹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第67题JAVA高级技术-多线程1(查看线程的运行状态)相关的知识,希望对你有一定的参考价值。
回城传送–》《JAVA筑基100例》
文章目录
零、前言
今天是学习 JAVA语言 打卡的第67天,每天我会提供一篇文章供群成员阅读( 不需要订阅付钱 ),读完文章之后,按解题思路,自己再实现一遍。在小虚竹JAVA社区 中对应的 【打卡贴】打卡,今天的任务就算完成了。
因为大家都在一起学习同一篇文章,所以有什么问题都可以在群里问,群里的小伙伴可以迅速地帮到你,一个人可以走得很快,一群人可以走得很远,有一起学习交流的战友,是多么幸运的事情。
学完后,自己写篇学习报告的博客,可以发布到小虚竹JAVA社区 ,供学弟学妹们参考。
我的学习策略很简单,题海策略+ 费曼学习法。如果能把这100题都认认真真自己实现一遍,那意味着 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()方法进入等待状态的线程
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());// 输出线程状态
四、推荐专栏
五、示例源码下载
关注下面的公众号,回复筑基+题目号
筑基67
以上是关于第67题JAVA高级技术-多线程1(查看线程的运行状态)的主要内容,如果未能解决你的问题,请参考以下文章