Продолжительность метода синхронизации: всегда показывает ноль секунд?

Я пытаюсь определить, сколько времени занимает метод в моем приложении, проблема в том, что время всегда показывает 0 секунд. Что не так с моим кодом ниже?

long currentTimeInMilis = System.currentTimeMillis() % 1000;

    public ClassName() {

        public void timeMethod() {

                long startOfmethod= currentTimeInMilis;

                methodToTime();

                long endOfMethod= currentTimeInMilis;

                long totalTime = endOfMethod= - startOfmethod;

                LOGGER.info("[Method Took: {}", DurationFormatUtils.formatDuration(totalTime, "H:mm:ss", true) + "]\n");                                            
             }
    }

Проблема в том, что я получаю этот вывод каждый раз, хотя я знаю, что это занимает больше нуля секунд:

Method took: 0:0:0:

1 ответ

Решение

Вы используете то же самое currentTimeInMilis переменная до и после. Это не так, как что-то магически изменило это в то же время (ну, если methodToTime делает, так как вы сделали это полем, а не локальной переменной). Вы должны на самом деле позвонить System.currentTimeMillis() снова после завершения метода, чтобы получить значение, которое вы можете сравнить со значением до вызова метода.

Например, избавиться от currentTimeInMilis поле полностью, и увидеть *** ниже:

public ClassName() {

    public void timeMethod() {

        long startOfmethod = System.currentTimeMillis(); // ***

        methodToTime();

        long endOfMethod = System.currentTimeMillis();   // ***

        long totalTime = endOfMethod = -startOfmethod;

        LOGGER.info("[Method Took: {}", DurationFormatUtils.formatDuration(totalTime, "H:mm:ss", true) + "]\n");
    }
}

Обратите внимание, что я удалил % 1000 также; не имеет смысла запоминать только часть значения в миллисекундах.

Тем не менее, обратите внимание, что это действительно только для очень, очень грубого указания (вы сказали, что метод занимает две минуты). Информацию о правильном тестировании см. В разделе Как написать правильный микро-тест на Java?

Другие вопросы по тегам