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

Cách tính thời gian trôi qua/thực thi trong Java

Nói chung, thời gian trôi qua (elapsed time) hoặc thời gian thực thi (execution 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:

  • 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.
  • Phương thức nanoTime() trả về thời gian hiện tại tính bằng nano-giây. Tương tự, lấy hiệu giữa các giá trị trước và sau khi thực thi.
  • Phương thức now() của lớp Instant trả về thời gian hiện tại và phương thức Duration.between() trả về hiệu giữa hai giá trị thời gian cho trước.
  • Thư viện Apache Commons cung cấp lớp StopWatch với các phương thức start(), stop() và getTime().
  • Phương thức getTime() của lớp java.util.Date trả về thời gian hiện tại.
  • Bạn cũng có thể lấy thời gian trong instance hiện tại bằng getInstance().getTime().getTime().

Ví dụ: Sử dụng currentTimeMillis()

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

Ví dụ: Sử dụng nanoTime()

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

Ví dụ: Sử dụng lớp Instant (Java 8+)

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

Ví dụ: Sử dụng StopWatch (Apache Commons Lang)

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

Ví dụ: Sử dụng Date.getTime()

import java.util.Date;

public class Demo {
    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 startTime = new Date().getTime();
        new Demo().test();
        long endTime = new Date().getTime();
        long time = endTime - startTime;
        System.out.println("Thời gian thực thi: " + time);
    }
}

Kết quả

... (tương tự)
Thời gian thực thi: 5

Ví dụ: Sử dụng Calendar

import java.util.Calendar;

public class Demo {
    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) throws InterruptedException {
        long startTime = Calendar.getInstance().getTime().getTime();
        new Demo().test();
        long endTime = Calendar.getInstance().getTime().getTime();
        long time = endTime - startTime;
        System.out.println("Thời gian thực thi: " + time);
    }
}

Kết quả

... (tương tự)
Thời gian thực thi: 20