最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Java?獲取時間戳的方法

 更新時間:2022年04月19日 16:36:15   作者:程序員的成長之路  
這篇文章主要介紹了關(guān)于Java獲取時間戳的方法,Java有兩個取時間戳的方法,分別是System.currentTimeMillis()和System.nanoTime()下文對兩種方法進行詳細介紹,需要的小伙伴可以參考一下

Java有兩個取時間戳的方法:System.currentTimeMillis()System.nanoTime(),它們的使用場景是有區(qū)別的,當前網(wǎng)上一些文章對于這兩個方法的性能討論存在一些片面的描述,本文希望能給出一個簡單的最終答案。

System.currentTimeMillis() 存在性能問題?

答案是否定的。

這兩個方法性能差異取決于操作系統(tǒng)。

Windows:

在 Windows 下,System.currentTimeMillis() System.nanoTime() 要快很多,這是因為 Windows 系統(tǒng)為前者提供的只是一個緩存變量,而后者則是實時的去硬件底層獲取計數(shù)。

所以如果你的生產(chǎn)環(huán)境是 Windows,請盡可能避免使用 System.nanoTime()。

Linux:

在 Linux 下,兩者的執(zhí)行耗時相差不大,不論是單線程還是多線程。

不同的虛擬機實現(xiàn)會帶來性能差異

如今的云主機主要有 Xen 和 KVM 兩種實現(xiàn)方式,網(wǎng)上有文章發(fā)現(xiàn)它們在取系統(tǒng)時間方面存在性能差異。

當我們的虛擬機用的是 Xen 時,取時間的耗時會是 KVM 的十倍以上。不過上文也提供了遇到此類問題該如何解決的方案。

需要寫一個專門的類來提升 System.currentTimeMillis() 性能嗎?

不需要。那屬于畫蛇添足。

我的測試代碼

我的測試代碼如下,沒有任何依賴,可以直接用 javac 編譯然后運行。讀者有興趣可以試試。

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;


public class TimePerformance {


public static final int LOOP_COUNT = 9999999;
public static final int THREAD_COUNT = 30;


public static void main(String[] args) {


Runnable millisTest = () -> {


long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
System.currentTimeMillis();
}
long end = System.currentTimeMillis();


System.out.printf("%s : %f ns per call\n",
Thread.currentThread().getName(), ((double)end - start) * 1000000 / LOOP_COUNT);
};


Runnable nanoTest = () -> {


long start = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
System.nanoTime();
}
long end = System.currentTimeMillis();


System.out.printf("%s : %f ns per call\n",
Thread.currentThread().getName(), ((double)end - start) * 1000000 / LOOP_COUNT);
};


Consumer<Runnable> testing = test -> {
System.out.println("Single thread test:");
test.run();


System.out.println(THREAD_COUNT + " threads test:");
List<Thread> threads = new ArrayList<>();
for (int i = 0; i < THREAD_COUNT; i++) {
Thread t = new Thread(test);
t.start();
threads.add(t);
}
// Wait for all threads to finish
threads.forEach(thread -> {
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
};


System.out.println(" Test System.nanoTime()");
testing.accept(nanoTest);
System.out.println(" Test System.currentTimeMillis()");
testing.accept(millisTest);
}
}

因為我用的是 Windows,所以執(zhí)行輸出當中System.nanoTime() 明顯非常慢。具體輸出內(nèi)容我就不放出來了,因為不具有參考價值,大多數(shù)生產(chǎn)環(huán)境用的是 Linux。

到此這篇關(guān)于關(guān)于Java 獲取時間戳的方法的文章就介紹到這了,更多相關(guān)Java 獲取時間戳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA解決springboot熱部署失效問題(推薦)

    IDEA解決springboot熱部署失效問題(推薦)

    熱部署,就是在應用正在運行的時候升級軟件,卻不需要重新啟動應用。這篇文章主要介紹了IDEA解決springboot熱部署失效問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • JavaWeb dbutils執(zhí)行sql命令并遍歷結(jié)果集時不能查到內(nèi)容的原因分析

    JavaWeb dbutils執(zhí)行sql命令并遍歷結(jié)果集時不能查到內(nèi)容的原因分析

    這篇文章主要介紹了JavaWeb dbutils執(zhí)行sql命令并遍歷結(jié)果集時不能查到內(nèi)容的原因分析及簡單處理方法,文中給大家介紹了javaweb中dbutils的使用,需要的朋友可以參考下
    2017-12-12
  • Spring Boot整合Thymeleaf詳解

    Spring Boot整合Thymeleaf詳解

    這篇文章主要介紹了Spring Boot整合Thymeleaf詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 分享java中設(shè)置代理的兩種方式

    分享java中設(shè)置代理的兩種方式

    有時候我們的程序中要提供可以使用代理訪問網(wǎng)絡(luò),代理的方式包括http、https、ftp、socks代理。比如在IE瀏覽器設(shè)置代理,這里簡單介紹下,需要的朋友可以參考下
    2015-12-12
  • HashMap方法之Map.getOrDefault()解讀及案例

    HashMap方法之Map.getOrDefault()解讀及案例

    這篇文章主要介紹了HashMap方法之Map.getOrDefault()解讀及案例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 關(guān)于Java使用Http輕量級請求庫Unirest的方法

    關(guān)于Java使用Http輕量級請求庫Unirest的方法

    這篇文章主要介紹了關(guān)于Java使用Http輕量級請求庫Unirest的方法,Unirest 是一個輕量級的 HTTP 請求庫,可發(fā)起 GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS 請求,支持 Node、Ruby、Java、PHP、Python、Objective-C、.NET 等多種語言,需要的朋友可以參考下
    2023-08-08
  • 使用maven方式創(chuàng)建springboot項目的方式

    使用maven方式創(chuàng)建springboot項目的方式

    使用Spring Initializr創(chuàng)建spring boot項目,因為外網(wǎng)問題導致很難成功,所以只能使用maven方式,這里介紹下使用maven方式創(chuàng)建springboot項目的方法,感興趣的朋友一起看看吧
    2022-09-09
  • Java 替換字符串中的回車換行符的方法

    Java 替換字符串中的回車換行符的方法

    Java 替換字符串中的回車換行符的方法,需要的朋友可以參考一下
    2013-03-03
  • JAVA內(nèi)存空間相關(guān)知識匯總

    JAVA內(nèi)存空間相關(guān)知識匯總

    這篇文章主要介紹了JAVA內(nèi)存空間相關(guān)知識,文中介紹的非常詳細,代碼幫助大家更好的參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • java搭建一個Socket服務器響應多用戶訪問

    java搭建一個Socket服務器響應多用戶訪問

    本篇文章主要介紹了java搭建一個Socket服務器響應多用戶訪問,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論

道真| 垣曲县| 四平市| 甘谷县| 左云县| 明水县| 广饶县| 安国市| 清徐县| 饶河县| 榆中县| 泸州市| 唐海县| 且末县| 达日县| 玛沁县| 苏尼特左旗| 雅安市| 宣化县| 伊金霍洛旗| 玉溪市| 石景山区| 钟祥市| 大竹县| 漳州市| 邵阳县| 新化县| 蕲春县| 福建省| 德令哈市| 中宁县| 乐陵市| 德兴市| 新巴尔虎右旗| 法库县| 二手房| 多伦县| 江西省| 社会| 利津县| 大城县|