首页 > 其他分享 >编码:线程执行监控

编码:线程执行监控

时间:2024-08-28 19:36:23浏览次数:4  
标签:编码 task 监控 任务 线程 startTime 运行

 

只要我们所有提交到线程池的任务,都用一个框架统一封装的 RunnableWrapper 类,基于装饰模式来进行包装。

此时就可以得到线程任务的创建时间、开始时间、结束时间,接着就可以计算出这个任务的排队耗时、运行耗时,通过监控系统进行上报。

此时我们通过在监控系统里配置告警条件,就可以实现不同线程池的每个任务的耗时指标上报,同时如果有某个线程池的某个线程排队耗时或者运行耗时超过了我们配置的阈值,就会自动告警。

// 线程任务包装类,用了装饰设计模式
public class RunnableWrapper implements Runnable {

    // 实际要执行的线程任务
    private Runnable task;
    // 线程任务被创建出来的时间
    private long createTime;
    // 线程任务被线程池运行的开始时间
    private long startTime;
    // 线程任务被线程池运行的结束时间
    private long endTime;

    // 当这个任务被创建出来的时候,就会设置他的创建时间
    // 但是接下来有可能这个任务提交到线程池后,会进入线程池的队列排队
    public RunnableWrapper(Runnable task){
        this.task = task;
        this.createTime = new Date().getTime();
    }

    // 当任务在线程池排队的时候,这个run方法是不会被运行的
    // 但是当任务结束了排队,得到线程池运行机会的时候,这个方法会被调用
    // 此时就可以设置线程任务的开始运行时间
    public void run(){
        this.startTime = new Date().getTime();

        // 此处可以通过调用监控系统的API,实现监控指标上报
        // 用线程任务的startTime-createTime,其实就是任务排队时间
        // monitor.report("threadName", "queueWaitTime", startTime-createTime);

        // 接着可以调用包装的实际任务的run方法
        task.run();

        // 任务运行完毕以后,会设置任务运行结束的时间
        this.endTIme = new Date().getTime();

        // 此处可以通过调用监控系统的API,实现监控指标上报
        // 用线程任务的endTime - startTime,其实就是任务运行时间
        // monitor.report("threadName", "taskRunTime", endTime - startTime);
    }

}

 

标签:编码,task,监控,任务,线程,startTime,运行
From: https://www.cnblogs.com/clarino/p/18385432

相关文章

  • 信道编码——线性分组码(Hamming、BCH、RS)Matlab编译码实现与性能分析
    目录第六篇博客感言编译码原理Hamming码BCH码RS码Matlab源码和运行结果源码结果Hamming码BCH码RS码 总结第六篇博客感言坚持写,及时写。编译码原理Hamming码参考汉明码——计算机网络——全网最通俗的讲解-CSDN博客。BCH码参考【举例子详细分析】BCH码(BC......
  • 单例模式 lock 多线程 双重检查锁定机制
    单例模式单例模式publicclassSingleton{//定义一个静态变量来保存类的实例privatestaticSingletonuniqueInstance;//定义一个标识确保线程同步privatestaticreadonlyobjectlocker=newobject();//定义私有构造函数,使外界不能创建该类......
  • 重塑视频监控体验:WebRTC技术如何赋能智慧工厂视频高效管理场景
    视频汇聚EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。EasyCVR平台不仅兼容多种主流标准协议及私有协议/SDK的接入(如:GB28181、RTSP/Onvif、RTMP、JT808、GA/T1400协议,海康Eh......
  • 监控电脑的软件叫什么?不可错过的10款电脑监控软件推荐
    电脑监控软件成为了企业管理、家庭监护以及个人安全防护的重要工具。它们不仅能帮助企业提高员工工作效率、保护数据安全,还能为家庭用户提供孩子上网行为的监督。以下是不可错过的10款电脑监控软件推荐,每款都有其独特的功能和适用场景。1.安企神软件该软件是一款专业的电......
  • 【Java】多线程创建与管理 (实操图解)
    Java系列文章目录补充内容Windows通过SSH连接Linux第一章Linux基本命令的学习与Linux历史文章目录Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1Thread4.2Runnable五、总结:一、前言多线程入门二、学习内容:实现多线程效果三、问题......
  • zabbix监控Tomcat服务器操作指引
    作者:乐维社区(forum.lwops.cn)许远Tomcat是一个流行的JavaServlet容器,用于开发和部署JavaWeb应用程序,广泛应用于中小型系统、开发与测试环境、集成环境等场合。Zabbix是一个开源的监控解决方案,广泛用于监控各种网络参数、服务器健康状态以及应用程序的性能,而JMX(JavaManagement......
  • openGauss-Anomaly_detection_数据库指标采集_预测与异常监控
    Anomaly-detection:数据库指标采集、预测与异常监控可获得性本特性自openGauss1.1.0版本开始引入。特性简介anomaly_detection是openGauss集成的、可以用于数据库指标采集、预测以及异常监控与诊断的AI工具,是dbmind套间中的一个组件。支持采集的信息包括IO_Read、IO_Write、CPU......
  • 线程相关知识及应用
    1.在运行打印结果时,窗体Form1是无法移动的,这就是窗体作为主线程被阻塞。有时候我们难免会遇到要做特别消耗时间的一些操作。因此,解决上述问题就要用多线程2.按钮2点击事件,注册一个线程来运行Run这个函数,而thread.Start表示注册的线程开始运行。按钮3点击事件是获取线程......
  • c#关于同步 /异常/多线程/事件 事例
    sync同步async异步,要与await成对使用Thread //计算程序执行时间StopWatch sw=StopWatch.Start();转自:https://codeload.github.com/zhaoxueliang86/WinFormsAsyncAwait/zip/refs/heads/BilibiliB站UP主:银色 usingSystem.Diagnostics;usingSystem.Text;na......
  • Java后端分布式系统的服务监控:Zabbix与Nagios
    Java后端分布式系统的服务监控:Zabbix与Nagios大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在分布式系统中,服务监控是确保系统稳定性和可靠性的重要手段。Zabbix和Nagios是两款广泛使用的开源监控系统,它们提供了网络和服务器监控的功能。服务监控......