ストップウォッチの概要
StopWatch クラスは、Spring フレームワークでコードの実行時間を測定するために使用されるツール クラスであり、監視情報を記録するための一連のプロパティを提供します。
この記事は spring-boot-starter-web:2.2.2RELEASE バージョンに基づいています。
ソースコード:
public class StopWatch {
private final String id;
private boolean keepTaskList = true;
private final List<StopWatch.TaskInfo> taskList = new LinkedList<>();
private long startTimeMillis;
@Nullable
private String currentTaskName;
@Nullable
private StopWatch.TaskInfo lastTaskInfo;
private int taskCount;
private long totalTimeMillis;
......方法略
public static final class TaskInfo {
private final String taskName;
private final long timeNanos;
}
}
詳細なストップウォッチ属性
属性 | 説明 |
---|---|
ID | StopWatch オブジェクトの一意の識別子を示します。コンストラクターを通じて渡すことができます。 |
タスクリストを維持する | 記録されたすべての監視タスクを保持するかどうかを示します。デフォルトは true です。 trueの場合はgetTaskInfo()メソッドですべての監視タスクの詳細情報を取得できますが、そうでない場合は最後の監視タスクの詳細情報のみ取得できます。 |
タスクリスト | すべての監視タスク情報を記録するために使用されます。タスク情報は、keepTaskList 属性値が true の場合にのみ記録されます。この値は、stop() メソッドが呼び出されたときにタスク情報を追加します。 |
現在のタスク名 | 現在実行中の監視タスクの名前を示します。この値は、start() メソッドが呼び出されたときに設定されます。 |
最後のタスク情報 | タスク名、実行時間など、最後に実行された監視タスクの詳細情報を示します。この値は、stop() メソッドが呼び出されたときに設定されます。 |
タスク数 | 実行する監視タスクの数を示し、stop()メソッド呼び出し時の値は+1されます。 |
合計時間ミリス | StopWatch オブジェクトによって記録されたすべての監視タスクの合計実行時間をミリ秒単位で示します。stop() メソッドが呼び出されたときの値 + 現在のタスクの実行時間です。 |
タスク情報.タスク名 | ミッション名。 |
TaskInfo.timeNanos | タスクの実行時間。 |
StopWatchメソッドの詳しい説明
方法 | 説明 |
---|---|
void setKeepTaskList(boolean keepTaskList) | 記録されたすべての監視タスクを保持するかどうかを設定します。デフォルトは true です。 値が true の場合、プログラムは getTaskInfo() メソッドを通じてすべての監視タスクの詳細情報を取得できます。 |
ボイドスタート() | 新しい監視タスクを開始し、タスク名を設定できます。現在の時刻とタスク名を記録します。 |
ボイドストップ() | 現在の監視タスクを終了します。タスクの実行時間を記録し、合計実行時間とタスクの数を更新します。 |
文字列getId() | 一意の識別子を取得します。 |
文字列 currentTaskName() | 現在実行中の監視タスクの名前を取得します。 |
TaskInfo getLastTaskInfo() | 最後に実行した監視タスクのタスク名、開始時刻、終了時刻、実行時刻などの詳細情報を取得します。 |
文字列 getLastTaskName() | 最後に実行された監視タスクのタスク名を取得します |
long getLastTaskTimeMillis() | 最後に実行された監視タスクの実行時間をミリ秒単位で取得します。 |
long getLastTaskTimeNanos() | 最後に実行された監視タスクの実行時間をナノ秒単位で取得します。 |
int getTaskCount() | 実行された監視タスクの数を取得する |
TaskInfo[] getTaskInfo() | すべての監視タスク情報を取得します。 keepTaskList プロパティが true の場合にのみ有効です。 |
ダブル getTotalTimeSeconds() | すべての監視タスクの合計実行時間を秒単位で取得します。 |
長い getTotalTimeMillis() | すべての監視タスクの合計実行時間をミリ秒単位で取得します。 |
long getTotalTimeNanos() | すべての監視タスクの合計実行時間をナノ秒単位で取得します。 |
ブール値 isRunning() | 現在の StopWatch オブジェクトが監視タスクを実行しているかどうかを確認します。 |
文字列 shortsummary() | タスク番号や合計実行時間など、すべての監視タスクの簡単な情報を文字列形式で出力します。 |
文字列 prettyPrint() | すべての監視タスクの実行時間と詳細を文字列として出力します。 |
ストップウォッチの使用例
public static void main(String[] args) throws InterruptedException {
StopWatch stopWatch = new StopWatch();
stopWatch.start("task1");
System.out.println("当前任务名称:"+stopWatch.currentTaskName());
Thread.sleep(1000);
stopWatch.stop();
System.out.println("task1耗时毫秒:"+stopWatch.getLastTaskTimeMillis());
stopWatch.start("task2");
System.out.println("当前任务名称:"+stopWatch.currentTaskName());
Thread.sleep(2000);
stopWatch.stop();
System.out.println("task2耗时毫秒:"+stopWatch.getLastTaskTimeMillis());
System.out.println("总任务数:"+stopWatch.getTaskCount());
System.out.println("总耗时毫秒:"+stopWatch.getTotalTimeMillis());
System.out.println("所有任务简要信息:\n"+stopWatch.shortSummary());
System.out.println("所有任务详细信息:\n"+stopWatch.prettyPrint());
}
出力:
当前任务名称:task1
task1耗时毫秒:1013
当前任务名称:task2
task2耗时毫秒:2014
总任务数:2
总耗时毫秒:3027
所有任务简要信息:
StopWatch '': running time = 3027555400 ns
所有任务详细信息:
StopWatch '': running time = 3027555400 ns
---------------------------------------------
ns % Task name
---------------------------------------------
1013462900 033% task1
2014092500 067% task2