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

Cách đo thời gian trôi qua trong 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 khác nhau để tìm thời gian trôi qua trong Java:

1. Sử dụng phương thức currentTimeMillis()

Phương thức currentTimeMillis() trả về thời gian hiện tại tính bằng mili-giây. Để tìm thời gian trôi qua cho một phương pháp, bạn có thể lấy hiệu giữa các giá trị thời gian trước và sau khi thực thi phương pháp mong muốn.

Ví dụ

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[]) {
        long begin = System.currentTimeMillis();
        new Example().test();
        long end = System.currentTimeMillis();
        long time = end - begin;
        System.out.println();
        System.out.println("Thời gian trôi qua: " + time + " mili-giây");
    }
}

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: 4 mili-giây

2. Sử dụng phương thức nanoTime()

Phương thức nanoTime() trả về thời gian hiện tại tính bằng nano-giây. Độ chính xác cao hơn currentTimeMillis().

Ví dụ

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[]) {
        long begin = System.nanoTime();
        new Example().test();
        long end = System.nanoTime();
        long time = end - begin;
        System.out.println();
        System.out.println("Thời gian trôi qua: " + time + " nano-giây");
    }
}

Kết quả

... (tương tự)
Thời gian trôi qua: 1530200 nano-giây

3. Sử dụng lớp Instant (Java 8+)

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.

Ví dụ

import java.time.Duration;
import java.time.Instant;

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[]) {
        Instant start = Instant.now();
        new Example().test();
        Instant end = Instant.now();
        long time = Duration.between(start, end).toMillis();
        System.out.println();
        System.out.println(time + " Mili-giây");
    }
}

Kết quả

... (tương tự)
3 Mili-giây

4. Sử dụng lớp StopWatch (Apache Commons Lang)

Thư viện Apache Commons cung cấp lớp StopWatch với các phương thức start(), stop() và getTime().

Maven dependency:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
</dependency>

Ví dụ

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[]) {
        StopWatch obj = new StopWatch();
        obj.start();
        new Example().test();
        obj.stop();
        System.out.println();
        System.out.println("Thời gian trôi qua: " + obj.getTime() + " mili-giây");
    }
}

Kết quả

... (tương tự)
Thời gian trôi qua: 1 mili-giây