簡體   English   中英

Java重新排序會影響System.currentTimeMillis()嗎?

[英]Does Java reordering affect System.currentTimeMillis()?

根據Java Memory Model,只要執行結構良好 ,指令就可以重新排序。

所以我想知道,以下代碼是否可能產生以下輸出?

[代碼] [在同一個主題中]

long a = System.currentTimeMillis();
long b = System.currentTimeMillis();
long c = System.currentTimeMillis();

[輸出]

a == 10, b == 20, c == 15

如果不可能,那么JVM /實現會做些什么來防止這種情況發生?

請參閱此問題指令重新排序和發生在java之前的關系

我相信,除非您處於不同的線程中,否則任何執行的結果將始終與代碼中的順序一致。 在這種情況下,由於無法按順序處理它,即使您的字段對另一個線程可見,它也應該是好的。

由於是用戶系統調用,編譯器不應該在同一個線程中重新排序它們。 如果不是這樣,我們甚至可以在System.out.println(獨立值)中體驗重新排序效果; 我想對System / OS的時鍾的訪問在這些操作之間創建了一種關系(總是針對當前線程),所以理論上它們之間存在某種依賴關系。 可能JVM會考慮此問題,並且永遠不會重新排序用戶系統調用。

暫無
暫無

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

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