[英]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-8098798和JDK-8200284中報告 。 它已在JDK 12中修復 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.