/
onequ1z
/
JavaCoursePaperTulSU
Обзор
Документация
Войти
/
onequ1z
/
JavaCoursePaperTulSU
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/ru/dmitry/montecarlo/util/Stopwatch.java
72 строки
3 KB
tayno
Рефакторинг: добавление секундомера, профилировщика и очистка кода
05 дек 2025, 09:37
05 дек 2025, 09:37
52c8b9a
Код
Авторство
О чём код?
package ru.dmitry.montecarlo.util; /** * Утилита для измерения времени выполнения операций. * Использует {@link System#nanoTime()} для высокоточных измерений. */ public class Stopwatch { private long startNanos; private boolean isRunning; /** * Создаёт новый остановленный секундомер. */ public Stopwatch() { this.isRunning = false; } /** * Запускает секундомер. * Если секундомер уже запущен, перезапускает его. */ public void start() { this.startNanos = System.nanoTime(); this.isRunning = true; } /** * Останавливает секундомер и возвращает прошедшее время в миллисекундах. * * @return время в миллисекундах с момента последнего вызова {@link #start()} * @throws IllegalStateException если секундомер не был запущен */ public long stop() { if (!isRunning) { throw new IllegalStateException("Stopwatch не был запущен. Вызовите start() перед stop()."); } long endNanos = System.nanoTime(); isRunning = false; return (endNanos - startNanos) / 1_000_000L; } /** * Возвращает прошедшее время в миллисекундах без остановки секундомера. * * @return время в миллисекундах с момента последнего вызова {@link #start()} * @throws IllegalStateException если секундомер не запущен */ public long elapsedMillis() { if (!isRunning) { throw new IllegalStateException("Stopwatch не запущен. Вызовите start() перед elapsedMillis()."); } long currentNanos = System.nanoTime(); return (currentNanos - startNanos) / 1_000_000L; } /** * Проверяет, запущен ли секундомер. * * @return true, если секундомер запущен, false в противном случае */ public boolean isRunning() { return isRunning; } /** * Сбрасывает секундомер в начальное состояние. */ public void reset() { this.isRunning = false; this.startNanos = 0L; } }