精选文章 时间测试工具类

时间测试工具类

作者:坚持吧骚年 时间: 2019-11-12 03:36:16
坚持吧骚年 2019-11-12 03:36:16

public class PerformanceMeasurementUtil {
    private static final Map accruedTimeMap = new ConcurrentHashMap<>();
    private static final Map startTimeMap = new ConcurrentHashMap<>();
    private static final Logger logger = LoggerFactory.getLogger(PerformanceMeasurementUtil.class);
    private static final String MSG_TOTAL_TIME = "Performance Measurement Results in Thread %d:----The total time for key %s is %d";
    private static final String MSG_START_TIME = "Performance Measurement Start Time in Thread %d: The start time for key %s is %d";
    private static final String MSG_END_TIME = "Performance Measurement End Time in Thread %d:---The end time for key %s is %d";

    public static void recordStartTime(String measurementKey) {
        Long now = System.currentTimeMillis();
        startTimeMap.put(measurementKey, now);
        //logger.error(String.format(MSG_START_TIME, Thread.currentThread().getId(), measurementKey, now));
    }

    public static void recordEndTime(String measurementKey) {
        long now = System.currentTimeMillis();
        //logger.error(String.format(MSG_END_TIME, Thread.currentThread().getId(), measurementKey, now));
        Long startTime = startTimeMap.get(measurementKey);
        long consumedTime = now - startTime;

        Long accruedTime = accruedTimeMap.get(measurementKey);
        Long totalTime = add(accruedTime, consumedTime);

        accruedTimeMap.put(measurementKey, totalTime);
    }

    private static Long add(Long accruedTime, long consumedTime) {
        return accruedTime == null ? consumedTime : accruedTime + consumedTime;
    }

    public static void printMeasurements() {
        for (Map.Entry entry : accruedTimeMap.entrySet()) {
            logger.error(String.format(MSG_TOTAL_TIME, Thread.currentThread().getId(), entry.getKey(), entry.getValue()));
        }
    }

    public static void log(String msg) {
        logger.error(String.format("Log msg in Thread %d: %s", Thread.currentThread().getId(), msg));
    }

    public static void reset() {
        logger.error("time has been cleared");
        startTimeMap.clear();
        accruedTimeMap.clear();
    }
}

 

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:centos7安装Docker及使用

下一篇:ResourceBundle.getBundle读取资源文件的路径

您可能感兴趣

  • .NET Core:通过Web API进行微服务交互

    目录 介绍 命名协议 MicroCommerce应用程序结构 MicroCommerce应用开发 1.接口项目,微服务接口和模型类 2. ProductCatalog项目 3. ShoppingCart项目 4. ActivityLogger项目 5. WebUI项目,用户界面 6.关于通用功能的几句话 应用测试 结论 缺点 下载源代码26.3 KB 介绍 几乎所有在.NET Core中使用...

  • MemCache详细解读

    本节内容主要关于mencache的工作原理,memcache的应用场景及其应用实例配置,memcache安装部署。 一、Memcached工作原理 1.服务端缓存实现 (1)memcached特性 分布式: 实例和缓存在逻辑上是分离的 普通缓存 Memcached缓存 特 性 缓存与特定的应用实例绑定,每个应用实例只能访问特定的缓存 实例独立于各个应用服务器实例运行,每应用实例可以访问任意缓...

  • 2020B证(安全员)考试及B证(安全员)模拟考试题库

    题库来源:安全生产模拟考试一点通公众号小程序 2020B证(安全员)考试及B证(安全员)模拟考试题库,包含B证(安全员)考试答案解析及B证(安全员)模拟考试题库练习。由安全生产模拟考试一点通公众号结合国家B证(安全员)考试最新大纲及B证(安全员)考试真题出具,有助于B证(安全员)考试软件考前练习。 1、【单选题】多台挖掘机在同一作用面机械开挖,挖掘机间距应大于( )。( B ) A、5m B...

  • JetPack WorkManager

    1.概览 官方文档:WorkManager 谷歌实验室:官方教程 官方案例:android-workmanager WorkManger介绍视频:中文官方介绍视频 谷歌工程师博客:https://medium.com/androiddevelopers/workmanager-basics-beba51e94048 Android JetPack实例学习:https://www.jiansh...

  • 不停机还能替换代码?6年的 Java程序员表示不可思议

    相信很多人都有这样一种感受,自己写的代码在开发、测试环境跑的稳得一笔,可一到线上就抽风,不是缺这个就是少那个反正就是一顿报错,而线上调试代码又很麻烦,让人头疼得很。不过, 阿里巴巴出了一款名叫Arthas的工具,可以在线分析诊断Java代码,让人眼前一亮。 ❞ Arthas 是什么? Arthas(阿尔萨斯) 是阿里开源的一个Java在线分析诊断工具。 Arthas 能解决啥问题? 在日常开...

  • 绝了!这款工具让SpringBoot不再需要Controller、Service、DAO、Mapper!

    Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具,使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布,一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应用共享同一个 http 端口,应用无需单独为 Dataway 开辟新的管理端口。 这种内嵌集成方式模式的...

  • IntellIJ IDEA2020新功能

    一、java 1、Java 14支持:记录和模式匹配 IntelliJ IDEA 2020.1添加了对Java 14及其新功能的支持。IDE不仅添加了对Records的完整代码洞察支持,而且还使您能够快速创建新记录并生成其构造函数和组件,并警告存在的错误。您还将发现对instanceof运算符的模式匹配的支持,包括新的检查和快速修复,该快速修复通过用新的简洁模式变量替换它们来快速简化冗长的i...

  • 面试官:说一下你对Java线程之间通信方式的理解

    多线程和并发,在平时开发中有些小伙伴用的不多,但是有些工作经验的面试中还是容易被问到的,故在之后几期先整理一些常见的多线程面试题供参考。 通信方式 ①同步 ②while轮询的方式 ③wait/notify机制 ④管道通信 一,介绍 本文总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码。 二,线程间的通信方式 ①同步 这...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。