【每日打卡贴】《JAVA筑基100例》【第67题】JAVA高级技术-多线程1(查看线程的运行状态)

李慢慢 2022-05-28 20:16:08

题目

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

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

 

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

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

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

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

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

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

 

解题思路

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

定义3个方法:

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

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

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

使用Thread类的getState()方法,可以获得线程的状态一>该方法的返回值是Tread.State

代码实现

package basic.example;
/**
 * Description: 如何描述该类
 *
 * @author hongzx
 * @date 2022/5/28
 * @version 1.0
 *
 * <pre>
 * 修改记录:
 * 修改后版本   修改人       修改日期         修改内容
 * 2022/5/28      hongzx    2022/5/28    Create
 * </pre>
 *
 */
public class BasicFor67 {

    /**
     * 线程类
     */
    static 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);//留时间打印
        }

        @Override
        public void run() {

            try {
                // 在新线程中运行
                waitForASecond();
                waitForYears();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

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

        ThreadState threadState = new ThreadState();
        Thread thread = new Thread(threadState);//新建线程
        System.out.println("新建线程状态:" + thread.getState());

        thread.start();//启动线程
        System.out.println("启动后的线程状态:" + thread.getState());

        Thread.sleep(100); // 当前线程休眠0.1秒,使新线程运行waitForSecond()方法
        System.out.println("计时等待0.1秒状态:" + thread.getState());

        Thread.sleep(1000);// 当前线程休眠1秒,使新线程运行waitForYears()方法
        System.out.println("计时等待1秒状态:" + thread.getState());

        threadState.notifyNow();
        System.out.println("线程唤醒后状态:" + thread.getState());

        Thread.sleep(1000);
        System.out.println("终止线程状态:" + thread.getState());

    }

}


结果截图

...全文
34 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-Java 发布问题, 以便更快地解决您的疑问

123,537

社区成员

发帖
与我相关
我的任务
社区描述
越努力越幸运,一个人努力可以走得很快,一群人努力,可以走得很远,准备好一起成为架构师了嘛!
社区管理员
  • 小虚竹
  • 阿莫 夕林
  • java李杨勇
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

【十日集训】十日训练营活动正式开始!和小虚竹一起,打卡学习,从入门到大佬,准备好一起成为JAVA架构师了嘛!!

【添加微信】备注1024,加入小虚竹JAVA微信交流群,一起学习交流进大厂

试试用AI创作助手写篇文章吧