Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách đo thời gian thực thi cho một phương thức Java

Nói chung, thời gian trôi qua (elapsed time) là thời gian từ điểm bắt đầu đến điểm kết thúc của một sự kiện. Dưới đây là các cách để tìm thời gian trôi qua trong Java:

  • Phương thức currentTimeMillis() trả về thời gian hiện tại tính bằng mili-giây.
  • Phương thức nanoTime() trả về thời gian hiện tại tính bằng nano-giây.
  • Phương thức now() của lớp Instant trả về thời gian hiện tại và Duration.between() trả về hiệu giữa hai giá trị thời gian.
  • Thư viện Apache Commons cung cấp lớp StopWatch với các phương thức start(), stop() và getTime().

Ví dụ: So sánh các phương pháp đo thời gian

Ví dụ sau minh họa cách tìm thời gian thực thi của một phương thức bằng các phương pháp đã nêu:

import java.time.Duration;
import java.time.Instant;
import org.apache.commons.lang3.time.StopWatch;

public class Example {
    public void test() {
        int num = 0;
        for (int i = 0; i <= 50; i++) {
            num = num + i;
            System.out.print(num + ", ");
        }
    }

    public static void main(String args[]) {
        Example obj = new Example();

        // 1. nanoTime()
        long start1 = System.nanoTime();
        obj.test();
        long end1 = System.nanoTime();
        System.out.println("Thời gian trôi qua (nano-giây): " + (end1 - start1));

        // 2. currentTimeMillis()
        long start2 = System.currentTimeMillis();
        obj.test();
        long end2 = System.currentTimeMillis();
        System.out.println("Thời gian trôi qua (mili-giây): " + (end2 - start2));

        // 3. Instant + Duration
        Instant inst1 = Instant.now();
        obj.test();
        Instant inst2 = Instant.now();
        System.out.println("Thời gian trôi qua: " + Duration.between(inst1, inst2).toString());

        // 4. StopWatch
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
        obj.test();
        stopWatch.stop();
        System.out.println("Thời gian trôi qua (phút): " + stopWatch.getTime());
    }
}

Kết quả

0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275,
Thời gian trôi qua (nano-giây): 1882300
0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275,
Thời gian trôi qua (mili-giây): 1
0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275,
Thời gian trôi qua: PT0.001S
0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275,
Thời gian trôi qua (phút): 1