2012-01-22 63 views
6

tôi có một thú vị "thời gian đi lại" vấn đề ngày hôm nay, bằng cách sử dụng đoạn mã sau:Thời gian theo dõi trong Java: sử dụng currentTimeMills()

for (int i = 0; i < 1; i++){ 
    long start = System.currentTimeMillis(); 
    // Some code here 
    System.out.print(i + "\t" + (System.currentTimeMillis() - start)); 
    start = System.currentTimeMillis(); 
    // Some code here 
    System.out.println("\t" + (System.currentTimeMillis() - start)); 
} 

Và tôi đã có kết quả

0 15 -606 

Và nó có vẻ như nó không lặp lại được. Bất cứ ai cũng có bất kỳ manh mối nào về những gì đã xảy ra bên trong trong thời gian chạy? Chỉ cần tò mò ...

Chỉnh sửa mới: Tôi đã sử dụng một thử nghiệm nhỏ để xác nhận câu trả lời bên dưới. Tôi chạy chương trình và thay đổi thời gian hệ thống trong khi chạy, và cuối cùng lặp lại "thời gian du lịch":

0 -3563323 163 

Trường hợp đóng. Cảm ơn các bạn!

Từ khác: cả currentTimeMillis() và nanoTime() đều dựa trên hệ thống, vì vậy chúng sẽ không đơn điệu nếu bộ đếm thời gian hệ thống được cập nhật (quay lại, cụ thể). Nó là tốt hơn để sử dụng một số bộ đếm thời gian dựa trên internet cho các trường hợp như vậy.

+0

Không chắc chắn 'currentTimeMillis' là đơn điệu. Bạn có thể có kết quả tốt hơn wit 'System.nanoTime()' được thiết kế đặc biệt để đo khoảng thời gian. – Rom1

+0

@ asksw0rder: bạn có thể chạy cùng một chương trình một lần nữa và cập nhật đầu ra thứ hai là gì không? –

+0

@ asksw0rder Biến i là gì? giá trị của nó là gì? Làm cho không có ý nghĩa để có được 0 trong đầu ra đầu tiên. – sfrj

Trả lời

11

System.currentTimeMillis() tùy thuộc vào thời gian của hệ thống. Vì vậy, nó có thể được sửa đổi bởi các hệ thống của bên thứ ba.

Để đo thời gian là System.nanoTime() tùy chọn tốt hơn.

+0

+1 để đề cập đến cách thay thế tốt hơn – sfrj

+0

nanoTime() là không ok cho trường hợp đó. Nó là tốt hơn để sử dụng thời gian dựa trên internet. – asksw0rder

+0

Tôi không nói rằng đó là lựa chọn tốt nhất, chỉ tốt hơn 'System.currentTimeMillis()'! .. nó là khó khăn để đo nano giây trên internet. – Robin

0

Tôi nhớ lại điều gì đó như điều chỉnh thời gian được thực hiện cho hệ thống thời gian một lần trong một thời gian quá khớp với thời gian thực tế. Và vì currentTimeMillis dựa vào đồng hồ hệ thống có thể đã xảy ra. Đồng thời bạn đang đồng bộ hóa với một máy chủ thời gian, điều đó cũng có thể.

Các vấn đề liên quan