先來看看System的靜態方法nanoTime()
public static long nanoTime()返回最準確的可用系統計時器的當前值,以毫微秒為單位。此方法只能用于測量已過的時間,與系統或鐘表時間的其他任何時間概念無關。返回值表示從某一固定但任意的時間算起的毫微秒數(或許從以后算起,所以該值可能為負)。此方法提供毫微秒的精度,但不是必要的毫微秒的準確度。它對于值的更改頻率沒有作出保證。在取值范圍大于約 292 年(263 毫微秒)的連續調用的不同點在于:由于數字溢出,將無法準確計算已過的時間。
例如,測試某些代碼執行的時間長度:
long startTime = System.nanoTime(); // ... the code being measured ... long estimatedTime = System.nanoTime() - startTime; 返回: 系統計時器的當前值,以毫微秒為單位。 從以下版本開始: 1.5currentTimeMillis
public static long currentTimeMillis()返回以毫秒為單位的當前時間。注意,當返回值的時間單位是毫秒時,值的粒度取決于底層操作系統,并且粒度可能更大。例如,許多操作系統以幾十毫秒為單位測量時間。請參閱
返回: 當前時間與協調世界時 1970 年 1 月 1 日午夜之間的時間差(以毫秒為單位測量)。 另請參見:Date
類的描述,了解可能發生在“計算機時間”和協調世界時(UTC)之間的細微差異的討論。Date
使用例子:public static void main(String[] args) { //首先我們創建一個大的list,里面的元素都是唯一的: int max = 1000000; List<String> values = new ArrayList<>(max); for (int i = 0; i < max; i++) { UUID uuid = UUID.randomUUID(); values.add(uuid.toString()); } //我們測量一下對這個集合進行排序所使用的時間。 //順序排序 long t0 = System.nanoTime(); long count = values.stream().sorted().count(); System.out.PRintln(count); long t1 = System.nanoTime(); long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0); System.out.println(String.format("sequential sort took: %d ms", millis)); //并行排序 long tt0 = System.nanoTime(); long countt = values.parallelStream().sorted().count(); System.out.println(countt); long tt1 = System.nanoTime(); long milliss = TimeUnit.NANOSECONDS.toMillis(tt1 - tt0); System.out.println(String.format("parallel sort took: %d ms", milliss));}
新聞熱點
疑難解答