Stories

Detail Return Return

Guava之Stopwatch - Stories Detail

Stopwatch主要用於時間統計吧

其實不光Guava,Apache Commons, 以及Spring Utils工具集都有StopWatch這個工具。

Guava的Stopwatch的例子代碼TestStopWatch.java

package com.cqsym.lmdw1.testguava;

import com.google.common.base.Stopwatch;

import java.util.concurrent.TimeUnit;

public class TestStopWatch {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        Stopwatch stopwatch = Stopwatch.createUnstarted();
        stopwatch.start();
        for (int i = 0; i < 3; i++) {
            System.out.println(i);
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        stopwatch.stop();
        System.out.println(stopwatch.elapsed());
        System.out.println(stopwatch.elapsed().toMillis());
        stopwatch.start();
        for (int i = 0; i < 3; i++) {
            System.out.println(i);
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        System.out.println(stopwatch.elapsed().toMillis());
        System.out.println(stopwatch.elapsed().toNanos());
        System.out.println(stopwatch.elapsed().toSeconds());
        System.out.println(stopwatch.elapsed().toMinutes());
        System.out.println(stopwatch.elapsed().toHours());
        System.out.println(stopwatch.elapsed().toDays());
        System.out.println(stopwatch.elapsed().toMillisPart());
        System.out.println(stopwatch.elapsed().toNanosPart());
        System.out.println(stopwatch.elapsed().toSecondsPart());
        System.out.println(stopwatch.elapsed().toMinutesPart());
        System.out.println(stopwatch.elapsed().toHoursPart());
        System.out.println(stopwatch.elapsed().toDaysPart());
        System.out.println(stopwatch.elapsed().getNano());
        System.out.println(stopwatch.elapsed().getSeconds());
        System.out.println(stopwatch.elapsed().getNano());

    }




}

説明:

Guava的Stopwatch的常見api。

Stopwatch.createUnstarted()創建不啓動統計,後面單獨start();
Stopwatch.createStarted()創建並啓動統計;
Stopwatch.start()啓動統計;
Stopwatch.stop()停止統計;
stopwatch.elapsed()用户獲取統計的數據,屬於Duration可以存儲(日,時,分,秒)也可以理解(幾天幾小時幾分鐘幾秒鐘)。


Spring工具集的StopWatch例子代碼SpringStopWatchDemo.java

package com.cqsym.lmdw1.testguava;

import org.springframework.util.StopWatch;

import java.util.concurrent.TimeUnit;

public class SpringStopWatchDemo {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        StopWatch stopwatch = new StopWatch();
        stopwatch.start();
        for (int i = 0; i < 3; i++) {
            System.out.println(i);
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        stopwatch.stop();
        System.out.println(stopwatch.currentTaskName());
        System.out.println(stopwatch.getId());
        System.out.println(stopwatch.getTaskInfo());
        System.out.println(stopwatch.getTotalTimeMillis());
        System.out.println(stopwatch.getTotalTimeNanos());
        System.out.println(stopwatch.getTotalTimeSeconds());
        System.out.println(stopwatch.getTotalTime(TimeUnit.MILLISECONDS));
        stopwatch.start();
        for (int i = 0; i < 3; i++) {
            System.out.println(i);
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        System.out.println("-----------------------------------------");
        System.out.println(stopwatch.currentTaskName());
        System.out.println(stopwatch.getId());
        System.out.println(stopwatch.getTaskInfo());
        System.out.println(stopwatch.getTotalTimeMillis());
        System.out.println(stopwatch.getTotalTimeNanos());
        System.out.println(stopwatch.getTotalTimeSeconds());
        System.out.println(stopwatch.getTotalTime(TimeUnit.MILLISECONDS));
    }
}

Guava之Stopwatch_i++

説明:

Spring工具集中的StopWatch和Guava使用還是有差異,特別是Spring工具集中的StopWatch他執行stop後,再次start是單獨的記時。還有一個重點就是spring工具集的StopWatch他在創建時可以傳入id,在啓動時可以可以start傳入taskName任務名稱。

1他的統計和和guava的統計不一樣,他的stop後再次start是單獨統計時間;

2他可以在創建時傳入id,還可以在執行任務和方法時傳入任務名稱;


Commons的lang3包StopWatch例子CommonsStopWatchDemo.java

package com.cqsym.lmdw1.testguava;

import org.apache.commons.lang3.time.StopWatch;

import java.util.concurrent.TimeUnit;

public class CommonsStopWatchDemo {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        StopWatch stopwatch = new StopWatch();
        stopwatch.start();
        for (int i = 0; i < 3; i++) {
            System.out.println(i);
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        stopwatch.stop();
        System.out.println(stopwatch.getNanoTime());
        System.out.println(stopwatch.getMessage());
        System.out.println(stopwatch.getStartInstant());
        System.out.println(stopwatch.getStopInstant());
        //System.out.println(stopwatch.getSplitDuration());

        stopwatch.reset();
        stopwatch.start();
        for (int i = 0; i < 3; i++) {
            System.out.println(i);
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        //stopwatch.stop();
        System.out.println("-----------------------------------------");
        System.out.println(stopwatch.getNanoTime());
        System.out.println(stopwatch.getMessage());
        System.out.println(stopwatch.getStartInstant());
        System.out.println(stopwatch.getStopInstant());


        stopwatch.suspend();
        System.out.println("Sleep 5秒!");
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("==========================================");
        stopwatch.resume();
        for (int i = 0; i < 3; i++) {
            System.out.println(i);
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        stopwatch.stop();

        System.out.println(stopwatch.getNanoTime());
        System.out.println(stopwatch.getMessage());
        System.out.println(stopwatch.getStartInstant());
        System.out.println(stopwatch.getStopInstant());

    }



}

Guava之Stopwatch_System_02

説明:

他也與上面的2個都不一樣,他stop後,要再次使用,需要reset後再次start;在創建計時器時可以傳入一個message來區。

還有就是他有暫停和恢復。【suspend()和resume()】。還支持split()分割,代碼如下:

StopWatch stopWatch = new StopWatch();

        // 開始計時
        stopWatch.start();
        System.out.println("開始計時...");

        // 模擬一些工作
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        // 第一個split點
        stopWatch.split();
        System.out.println("Split 1 時間: " + stopWatch.getSplitTime() + "ms");
        System.out.println("Split 1 格式化: " + stopWatch.formatSplitTime());

        // 繼續工作
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        // 第二個split點
        stopWatch.split();
        System.out.println("Split 2 時間: " + stopWatch.getSplitTime() + "ms");
        System.out.println("Split 2 格式化: " + stopWatch.formatSplitTime());

        // 繼續工作
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        // 停止計時
        stopWatch.stop();
        System.out.println("總時間: " + stopWatch.getTime() + "ms");
        System.out.println("總時間格式化: " + stopWatch.formatTime());

Guava之Stopwatch_i++_03

user avatar u_16297326 Avatar u_17494575 Avatar u_16847549 Avatar u_17353607 Avatar tech Avatar u_16237826 Avatar AmbitionGarden Avatar u_6813689 Avatar u_17514447 Avatar u_16769727 Avatar u_11365552 Avatar u_16985197 Avatar
Favorites 13 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.