其他分享
首页 > 其他分享> > 性能浪费的日志案例和使用Lambda优化日志案例

性能浪费的日志案例和使用Lambda优化日志案例

作者:互联网

性能浪费的日志案例

注意:

  日志可以帮助我们快速的定位问题,记录程序运行过程中的情况,以便项目的监控和优化。

  一种典型的场景就是对参数进行有条件使用,例如对日志消息进行拼接后,在满足条件的情况下进行打印输出

/*
    日志案例
        发现以下代码存在的一些性能浪费的问题
        调用showLog方法,传递的第二个参数是一个拼接后的字符串
        先把字符串拼接好,然后在调用showLog方法
        showLog方法中如果传递的日志等级不是1级
        那么就不会是如此拼接后的字符串
        所以感觉字符串就白拼接了,存在了浪费
 */
public class Logger {
    //定义一个根据日志的级别,显示日志信息的方法
    public static void showLog(int level,String message){
        //对日志的等级进行判断,如果是1级,那么输出日志信息
        if (level==1){
            System.out.println(message);
        }
    }

    public static void main(String[] args) {
        //定义三个日志信息
        String rz = "I";
        String rz1 = "LOVE";
        String rz2 = "JAVA";
        //调用showLog方法,传递日志级别和日志信息
        showLog(2,rz+rz1+rz2);
    }
}

 

使用Lambda优化日志案例

/*
      使用Lambda优化日志案例
      Lambda的特点:延迟加载
      Lambda的使用前提:必须存在函数式接口
 */
public class DemoLambda {
    //定义一个根据日志的级别,显示日志信息的方法
    public static void showLog(int level,messageBuilder message){
        //对日志的等级进行判断,如果是1级,那么输出日志信息
        if (level==1){
            System.out.println(message);
        }
    }

    public static void main(String[] args) {
        //定义三个日志信息
        String rz = "I";
        String rz1 = "LOVE";
        String rz2 = "JAVA";
        //调用showLog方法,传递日志级别和日志信息
//        showLog(1,()->{
//            return rz+rz1+rz2;
//        });
        /*
        使用Lambda表达式作为参数传递,仅仅是把参数传递到showLog方法中
        只有满足条件,日志的等级是1级
            才会调用接口messageBuilder中的方法builderMessage
            才会进行字符串的拼接
        如果条件不满足,日志的等级不是1级
            那么MessageBuilder接口中的方法builderMessage也不会行所以拼接字符串的代码也不会执行
             所以不会存在性能的浪费
     */
        showLog(1,()->{
            System.out.println("不满足条件不执行");
            return rz+rz1+rz2;
        });
    }
}
@FunctionalInterface
public interface messageBuilder {
    //定义一个拼接消息的抽象方法,返回拼接的消息
    public abstract String builderMessage();
}

 

标签:showLog,String,案例,拼接,日志,public,Lambda
来源: https://www.cnblogs.com/yuzong/p/16489350.html