zoukankan      html  css  js  c++  java
  • 【工具】- ActionUtils篇

    • 用于量化一些方法的工具
    public class ActionUtils {
    
        /**
         * .ctor
         */
        private ActionUtils() {
        }
    
        /**
         * 获取当前执行方法消耗时间毫秒值
         *
         * @param action 执行方法
         * @return 毫秒值
         */
        public static long computeActionCostMilliseconds(Action0 action) {
            //记录开始时间
            long startTime = System.currentTimeMillis();
            //此处为你调用的方法
            action.call();
            //记录结束时间
            long endTime = System.currentTimeMillis();
    
            return endTime - startTime;
        }
    
        /**
         * 获取当前执行方法消耗时间毫秒值
         *
         * @param action                   执行方法
         * @param elapsedMillisecondsLimit 消耗时间阀值(超过该值将执行loggerAction方法)
         * @param loggerAction             执行方法
         * @return 执行方法的返回值
         */
        public static <T> T computeFuctionCostMilliseconds(Func0<T> action, int elapsedMillisecondsLimit, Action1<Long>
                loggerAction) {
    
            return computeFuctionCostMilliseconds(action, ms -> ms > elapsedMillisecondsLimit, loggerAction);
        }
    
        /**
         * 获取当前执行方法消耗时间毫秒值
         *
         * @param action                       执行方法
         * @param elapsedMillisecondsLimitFunc 消耗时间阀值函数(该函数为True将执行loggerAction方法)
         * @param loggerAction                 执行方法
         * @return 执行方法的返回值
         */
        public static <T> T computeFuctionCostMilliseconds(Func0<T> action,
                Func1<Long, Boolean> elapsedMillisecondsLimitFunc,
                Action1<Long> loggerAction) {
            ActionElapseResult<T> result = computeFuctionCostMilliseconds(action);
    
            if (loggerAction != null && elapsedMillisecondsLimitFunc.call(result.getElapsedMilliseconds())) {
                loggerAction.call(result.getElapsedMilliseconds());
            }
    
            return result.getData();
        }
    
        /**
         * 获取当前执行方法消耗时间毫秒值
         *
         * @param action 执行方法
         * @return 消费毫秒值及返回结果
         */
        private static <T> ActionElapseResult<T> computeFuctionCostMilliseconds(Func0<T> action) {
            //记录开始时间
            long startTime = System.currentTimeMillis();
            //此处为你调用的方法
            T data = action.call();
            //记录结束时间
            long endTime = System.currentTimeMillis();
            //new ActionUtils().new ActionElapseResult()
            return new ActionElapseResult<>(endTime - startTime, data);
        }
    
        /**
         * 执行方法消耗时间及返回结果类
         *
         * @param <T> 返回类型
         */
        private static class ActionElapseResult<T> {
            private long elapsedMilliseconds;
            private T data;
    
            private ActionElapseResult(long ms, T data) {
                this.data = data;
                this.elapsedMilliseconds = ms;
            }
    
            private long getElapsedMilliseconds() {
                return elapsedMilliseconds;
            }
    
            private T getData() {
                return data;
            }
        }
    }
  • 相关阅读:
    致我的2018 你好2019
    第十四分块(前体)(二次离线莫队)
    [Ynoi2019模拟赛]Yuno loves sqrt technology II(二次离线莫队)
    [Ynoi2015]此时此刻的光辉(莫队)
    python+selenium+Firefox+pycharm版本匹配
    IntelliJ IDEA 配置Maven
    Jmeter如何监控服务器性能
    fiddler工具
    关于Python安装官方whl包和tar.gz包的方法详解
    浅析Web Services
  • 原文地址:https://www.cnblogs.com/lycsmzl/p/13495150.html
Copyright © 2011-2022 走看看