簡體   English   中英

為什么Thread.join使用currentTimeMillis?

[英]Why does Thread.join use currentTimeMillis?

在Java中,有兩種訪問時間的方法,System.currentTimeMillis和System.nanoTime。 第一個類似於掛鍾,可以根據閏秒改變時間,而其他操作系統導致時間變化。 因此,測量持續時間更適合使用更准確且通常更精確的nanoTime

考慮到這一點,為什么Thread.join()使用currentTimeMillis而不是nanoTime?

有問題的代碼是:

    public final synchronized void join(long millis) throws InterruptedException {
    long base = System.currentTimeMillis();
    long now = 0;

    if (millis < 0) {
        throw new IllegalArgumentException("timeout value is negative");
    }

    if (millis == 0) {
        while (isAlive()) {
            wait(0);
        }
    } else {
        while (isAlive()) {
            long delay = millis - now;
            if (delay <= 0) {
                break;
            }
            wait(delay);
            now = System.currentTimeMillis() - base;
        }
    }
}

這實際上是一個錯誤,並在JDK-8098798JDK-8200284中報告 它已在JDK 12中修復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM