最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java代碼耗時(shí)統(tǒng)計(jì)的5種實(shí)現(xiàn)方式

 更新時(shí)間:2026年03月19日 16:30:13   作者:程序員一博  
這篇文章主要介紹了Java代碼耗時(shí)統(tǒng)計(jì)的5種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

代碼耗時(shí)統(tǒng)計(jì)的并不是某個(gè)方法的耗時(shí),而是任意代碼段之間的耗時(shí)。

這個(gè)代碼段,可能是一個(gè)方法中的幾行代碼,也有可能是從這個(gè)方法的某一行到另一個(gè)被調(diào)用方法的某一行,因此通過 AOP 方式是不能實(shí)現(xiàn)這個(gè)需求的。

使用 System函數(shù)

public static void main(String[] args) {
    long  start = System.currentTimeMillis();
    try {
        // 模擬業(yè)務(wù)操作
        Thread.sleep(1000L);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
    long end = System.currentTimeMillis();
    System.out.println("耗時(shí):" + (end - start) + "ms");
}

或者

public static void main(String[] args) {
    long start = System.nanoTime();
    try {
        Thread.sleep(1000L);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
    long finish = System.nanoTime();

    long timeElapsed = finish - start;
    // 納秒
    System.out.println(timeElapsed);
}

使用 Instant.now()函數(shù)

public static void main(String[] args) {
    Instant start = Instant.now();
    try {
        Thread.sleep(1000L);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
    Instant finish = Instant.now();
    long timeElapsed = Duration.between(start, finish).toMillis();
    System.out.println(timeElapsed + "ms");
}

使用 Spring 框架提供的 StopWatch

public static void main(String[] args) {
    StopWatch watch = new StopWatch();
    watch.start("watcher");
    //some code
    try {
        Thread.sleep(1000L);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
    watch.stop();
    System.out.println(watch.prettyPrint());
}

使用 apache.commons 提供的 StopWatch

需要要入 apache.commons 依賴,用法上面的 spring 類似

java8 中的Function

在 jdk 1.8 中,引入了 java.util.function 包,通過該類提供的接口,能夠?qū)崿F(xiàn)在指定代碼段的上下文執(zhí)行額外代碼的功能。

public class TraceHolderTest {
    public static void main(String[] args) {
        TraceWatch traceWatch = new TraceWatch();

        TraceHolder.run(traceWatch, "function1", i -> {
            try {
                TimeUnit.SECONDS.sleep(1); // 模擬業(yè)務(wù)代碼
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        String result = TraceHolder.run(traceWatch, "function2", () -> {
            try {
                TimeUnit.SECONDS.sleep(1); // 模擬業(yè)務(wù)代碼
                return "YES";
            } catch (InterruptedException e) {
                e.printStackTrace();
                return "NO";
            }
        });

        TraceHolder.run(traceWatch, "function1", i -> {
            try {
                TimeUnit.SECONDS.sleep(1); // 模擬業(yè)務(wù)代碼
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        System.out.println(JSON.toJSONString(traceWatch.getTaskMap()));
    }
}

/* output: 
{"function2":[{"data":1004,"taskName":"function2"}],"function1":[{"data":1001,"taskName":"function1"},{"data":1002,"taskName":"function1"}]}
*/
public class TraceHolder {
    /**
     * 有返回值調(diào)用
     */
    public static <T> T run(TraceWatch traceWatch, String taskName, Supplier<T> supplier) {
        try {
            traceWatch.start(taskName);

            return supplier.get();
        } finally {
            traceWatch.stop();
        }
    }

    /**
     * 無返回值調(diào)用
     */
    public static void run(TraceWatch traceWatch, String taskName, IntConsumer function) {
        try {
            traceWatch.start(taskName);

            function.accept(0);
        } finally {
            traceWatch.stop();
        }
    }
}

這里利用了 Supplier 和 IntConsumer 接口,對外提供了有返回值和無返回值得調(diào)用,在 TraceHolder 類中,在核心代碼塊的前后,分別調(diào)用了前文的 TraceWatch 的方法,實(shí)現(xiàn)了耗時(shí)統(tǒng)計(jì)的功能。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java時(shí)間輪算法的實(shí)現(xiàn)代碼示例

    Java時(shí)間輪算法的實(shí)現(xiàn)代碼示例

    本篇文章主要介紹了Java時(shí)間輪算法的實(shí)現(xiàn)代碼示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring Boot 入門教程

    Spring Boot 入門教程

    相信很多人都接觸spring框架很長時(shí)間了,每次搭建spring框架的時(shí)候都需要配置好多的jar、xml,做很多繁瑣重復(fù)的配置,稍微不留神就會出現(xiàn)各種各樣的問題。今天給大家介紹一下如何利用Spring Boot快速的搭建一個(gè)簡單的web應(yīng)用
    2017-03-03
  • Java輕松實(shí)現(xiàn)Excel與CSV格式互轉(zhuǎn)(含批量轉(zhuǎn)換)

    Java輕松實(shí)現(xiàn)Excel與CSV格式互轉(zhuǎn)(含批量轉(zhuǎn)換)

    在 Java 開發(fā)中,經(jīng)常會遇到需要在 Excel 和 CSV 文件之間進(jìn)行數(shù)據(jù)轉(zhuǎn)換的場景,本文將分享如何在 Java 中實(shí)現(xiàn)單文件和批量的 Excel 與 CSV 轉(zhuǎn)換方法,希望對大家有所幫助
    2025-09-09
  • 關(guān)于Future機(jī)制原理及解析

    關(guān)于Future機(jī)制原理及解析

    這篇文章主要介紹了關(guān)于Future機(jī)制原理,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java的微信開發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例

    Java的微信開發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例

    這篇文章主要介紹了Java微信開發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例,注意一下json-lib所需要的jar包,需要的朋友可以參考下
    2016-02-02
  • Spring中的Sentinel熔斷降級詳解

    Spring中的Sentinel熔斷降級詳解

    這篇文章主要介紹了Spring中的Sentinel熔斷降級詳解,熔斷降級是一種保護(hù)系統(tǒng)穩(wěn)定性和可用性的機(jī)制,旨在防止故障的擴(kuò)散和蔓延,提高用戶體驗(yàn)和信任度,需要的朋友可以參考下
    2023-09-09
  • SpringBoot application.yml 最全避坑與多環(huán)境配置

    SpringBoot application.yml 最全避坑與多環(huán)境配置

    SpringBoot項(xiàng)目中,application.yml配置至關(guān)重要,涵蓋服務(wù)器端口、數(shù)據(jù)庫連接、第三方服務(wù)集成等配置,正確配置決定項(xiàng)目啟動與穩(wěn)定運(yùn)行,本文詳細(xì)解析yml語法、多環(huán)境配置及敏感信息處理,助你高效編寫、規(guī)避常見問題
    2026-06-06
  • Java MyBatis框架環(huán)境搭建詳解

    Java MyBatis框架環(huán)境搭建詳解

    MyBatis本是apache的一個(gè)開源項(xiàng)目iBatis,MyBatis環(huán)境的搭建有點(diǎn)麻煩,本章帶你了解搭建過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值
    2022-08-08
  • Java中二叉樹的建立和各種遍歷實(shí)例代碼

    Java中二叉樹的建立和各種遍歷實(shí)例代碼

    這篇文章主要介紹了Java中二叉樹的建立和各種遍歷實(shí)例代碼,涉及樹節(jié)點(diǎn)的定義,后序遍歷,層序遍歷,深度優(yōu)先和廣度優(yōu)先等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)之環(huán)形鏈表和約瑟夫問題詳解

    Java數(shù)據(jù)結(jié)構(gòu)之環(huán)形鏈表和約瑟夫問題詳解

    約瑟夫(Josephus)問題是單向環(huán)形鏈表的一種體現(xiàn),也就是丟手帕問題,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之環(huán)形鏈表和約瑟夫問題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08

最新評論

扎囊县| 中江县| 陈巴尔虎旗| 宜都市| 同江市| 天气| 茌平县| 五华县| 江油市| 佛冈县| 莱阳市| 扎赉特旗| 甘泉县| 西和县| 辰溪县| 迭部县| 赣榆县| 江都市| 昌吉市| 进贤县| 天峻县| 枣阳市| 织金县| 浦东新区| 康平县| 湘阴县| 察雅县| 大宁县| 岳阳县| 五大连池市| 于田县| 桦南县| 临海市| 桦南县| 蓬溪县| 英超| 手游| 政和县| 镇原县| 揭东县| 伊金霍洛旗|