Замерить время работы программы, Анонимный класс, Пример использования лямбда выражения
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); } }