【每日打卡贴】《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());

    }

}


结果截图

...全文
46 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-Java 发布问题, 以便更快地解决您的疑问
【2024亚太杯ABCD】亚太地区大学生数学建模竞赛(思路、代码、论文持续更新中.......)内容概要:本文档为2024及2025年亚太地区大学生数学建模竞赛(APMCM)的备赛资源汇总,涵盖A、B、C、D四道赛的思路解析、MATLAB/Python代码实现及论文写作指导,内容持续更新。资源涉及多个技术方向,包括无人机回收系统动力学建模(高斯原理)、非线性模型预测控制(MPC)、储能系统经济性优化、可重构电池故障诊断、电力系统机组组合的量子优化、裂纹检测、卡尔曼滤波目标跟踪、路径规划(UGV/UAV协同)、MIMO通信系统、天线物理边界计算等。同时提供大量科研技术支持,覆盖机器学习与深度学习(如LSTM、CNN、Transformer等在负荷、光伏、风电预测中的应用)、图像处理、信号处理、雷达追踪、电力系统优化、车间调度、元胞自动机模拟等多个领域,并附有智能优化算法(如粒子群、遗传算法、新型群智算法)在各类工程问中的实现案例。; 适合人群:具备一定数学建模基础、熟练掌握MATLAB或Python编程的高校本科生、研究生,尤其是准备参加亚太杯、全国大学生数学建模竞赛或其他科研项目的参赛者与科研人员。; 使用场景及目标:①为亚太杯数学建模竞赛提供完整的解思路、代码支持与论文参考,帮助快速构建高质量解决方案;②作为科研项目的技术参考资料,
内容概要:本文档为“澎湃创想”人像摄影工作室的启动与运营体系搭建项目管理计划书,旨在赣州市章贡区创建一家定位高端、个性化艺术人像摄影的工作室。项目采用预测型生命周期,通过WBS分解为场地建设、设备采购、团队组建、系统搭建和正式开业五大工作包,明确范围、进度与成本三大基线。项目总工期控制在D+45天内,成本基线为28万元,关键路径为场地装潢(31.6天)。通过S曲线、EVM等工具进行成本与进度控制,并设定年销售额35万元的盈亏平衡点。项目重点管理质量、风险与干系人,采用RACI矩阵明确6人核心团队职责,识别十大风险并制定应对策略,尤其关注市场竞争与人才流失问。; 适合人群:具备项目管理基础知识,从事创业项目策划、小型文化创意企业运营或项目执行的相关人员,尤其是摄影、艺术类初创企业负责人及项目管理者。; 使用场景及目标:①用于指导人像摄影工作室从零到一的系统化筹建与运营管理;②学习如何运用WBS、PDM、EVM、风险矩阵等PMI工具进行实际项目规划与控制;③掌握初创企业在资源有限条件下如何进行成本控制、进度管理和风险应对。; 阅读建议:此计划书结构完整,涵盖十大知识领域,建议结合项目管理知识体系(如PMBOK)进行对照学习,重点关注其基线制定、风险应对策略与干系人管理方法,并可在实际创业项目中参考其执行与监控机制。

134,681

社区成员

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

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