Замерить время работы программы

Замерить время работы программы, Анонимный класс, Пример использования лямбда выражения

currentTimeMillis() - возвращает время в миллисекундах прошедшее с 0:00 01 января 1970 года
Верить данным измерениям можно, если вычисления занимают сотни миллисекунд!
long startTime = System.currentTimeMillis();
// ... Действие, вычисление которого занимают сотни миллисекунд!
long endTime = System.currentTimeMillis();
long difMs = endTime - startTime;
long min = difMs / (1000 * 60);
long sec = (difMs / 1000) - (min * 60);
System.out.println("Программа завершена за " + min + " min " + sec + " s!");

Или так:

[expand title=»Подробное получение записи с лямбда выражением»]

import java.math.BigDecimal;

public class Timer {

    /**
     * Измеряет время выполнения метода run экземпляра класса,
     * реализующего функциональный интерфейс Runnable
     * */
    public long measureTime(Runnable runnable) {
        long startTime = System.currentTimeMillis();
        runnable.run();
        return System.currentTimeMillis() - startTime;
    }

    private static class BigDecimalPower implements Runnable {
        @Override
        public void run() {
            new BigDecimal("1234567").pow(100_000);
        }
    }

    public static void main(String[] args) {
        Timer timer = new Timer();
        long time = timer.measureTime(new BigDecimalPower());
        System.out.println(time);
    }
}

Можно воспользоваться более короткой формой записи с анонимным классом для создания экземпляра класса, реализующего интерфейс Runnable с помощью декларирования класса прямо в теле метода:

    public static void main(String[] args) {
        Timer timer = new Timer();
        long time = timer.measureTime(new Runnable() {
            @Override
            public void run() {
                new BigDecimal("1234567").pow(100_000);
            }
        });
        System.out.println(time);
    }

Или еще более короткой формой записи с помощью лямбда выражения

    public static void main(String[] args) {
        Timer timer = new Timer();
        long time = timer.measureTime(() -> new BigDecimal("1234567").pow(100_000));
        System.out.println(time);
    }

[/expand]

public class Timer {

    public long measureTime(Runnable runnable) {
        long startTime = System.currentTimeMillis();
        runnable.run();
        return System.currentTimeMillis() - startTime;
    }

    public static void main(String[] args) {
        Timer timer = new Timer();
        long time = timer.measureTime(() -> new BigDecimal("1234567").pow(100_000));
        System.out.println(time);
    }
}

Оцените автора
Kosenkov.Pro
Добавить комментарий