Guavaのcom.google.common.base.Stopwatch
の利用サンプルです。
このクラスは名前の通りストップウォッチのように処理時間の計測などに用います。
■Stopwatchを使わない計測
Stopwatchを利用しない場合、以下のようなコードで処理時間を計測することが多いかもしれません。
long start = System.currentTimeMillis(); // 時間を計測したい処理 execBusinessLogic(); long end = System.currentTimeMillis(); System.out.println("Execution time1: " + (end - start) + "ms");
Stopwatchを使った計測
Stopwatchを用いた場合は処理時間の計測は以下のようになります。
基本的に、 Stopwatch#createStarted
→ 計測したい処理 → Stopwatch#stop
の流れになります
Stopwatch stopwatch1 = Stopwatch.createStarted();
execBusinessLogic();
stopwatch1.stop();
System.out.println("Execution Stopwatch time1: " + stopwatch1);
■実行結果
Execution Stopwatch time1: 2.001 s
Stopwatchをリセットして計測を繰り返す
Stopwatchで計測した結果をStopwatch#reset
でリセットして計測を何度も繰り返すことができます
Stopwatch stopwatch1 = Stopwatch.createStarted(); execBusinessLogic(); stopwatch1.stop(); System.out.println("Execution Stopwatch time1: " + stopwatch1); // リセットすると0に戻る stopwatch1.reset(); System.out.println("Execution Stopwatch time2: " + stopwatch1); // リセット後の再測定を開始 stopwatch1.start(); execBusinessLogic(); stopwatch1.stop(); System.out.println("Execution Stopwatch time3: " + stopwatch1);
■実行結果
Execution Stopwatch time1: 2.001 s Execution Stopwatch time2: 0.000 ns Execution Stopwatch time3: 1.002 s
計測結果の出力単位を指定
Stopwatch#elapsed
で、計測結果を出力するときの単位を指定できます。
Stopwatch stopwatch1 = Stopwatch.createStarted(); execBusinessLogic(); stopwatch1.stop(); // マイクロ秒で出力 System.out.println("Execution Stopwatch time3: " + stopwatch1.elapsed(TimeUnit.MICROSECONDS) + " usec"); // ミリ秒秒で出力 System.out.println("Execution Stopwatch time3: " + stopwatch1.elapsed(TimeUnit.MILLISECONDS) + " msec");
■実行結果
Execution Stopwatch time3: 1001550 usec Execution Stopwatch time3: 1001 msec
試したソースコードの全体は以下の通りです
import java.util.Random; import java.util.concurrent.TimeUnit; import com.google.common.base.Stopwatch; public class StopwatchClient { public static void main(String[] args) { // Stopwatchを使わない場合の計測 long start = System.currentTimeMillis(); // 時間を計測したい処理 execBusinessLogic(); long end = System.currentTimeMillis(); System.out.println("Execution time1: " + (end - start) + "ms"); System.out.println("---------------------"); // Stopwatchを使うとこんな感じ Stopwatch stopwatch1 = Stopwatch.createStarted(); execBusinessLogic(); stopwatch1.stop(); System.out.println("Execution Stopwatch time1: " + stopwatch1); // リセットすると0に戻る stopwatch1.reset(); System.out.println("Execution Stopwatch time2: " + stopwatch1); // リセット後の再測定を開始 stopwatch1.start(); execBusinessLogic(); stopwatch1.stop(); System.out.println("Execution Stopwatch time3: " + stopwatch1); // 出力する単位を指定することもできる System.out.println("Execution Stopwatch time3: " + stopwatch1.elapsed(TimeUnit.MICROSECONDS) + " usec"); System.out.println("Execution Stopwatch time3: " + stopwatch1.elapsed(TimeUnit.MILLISECONDS) + " msec"); } /** * 何か業務処理の代わり */ private static void execBusinessLogic() { Random r = new Random(); try { Thread.sleep(1000 * r.nextInt(4)); } catch (InterruptedException e) { throw new RuntimeException(e); } } }