Zgodnie z modelem pamięci Java instrukcje można zmieniać tak długo, jak długo trwa wykonanie well-formed.Czy zmiana kolejności Java wpływa na System.currentTimeMillis()?
Zastanawiam się, czy to możliwe, że następujące kody generują następujące dane wyjściowe?
[Kody] [w tym samym wątku]
long a = System.currentTimeMillis();
long b = System.currentTimeMillis();
long c = System.currentTimeMillis();
[Wyjście]
a == 10, b == 20, c == 15
Jeżeli nie jest możliwe, to co robi JVM/implementacje zrobić, aby temu zapobiec ?
Jeśli nie uruchomisz tego w systemie z zegarem naprawdę bliskim 1 stycznia 1970, prawdopodobnie nie otrzymasz tych dokładnych wartości. Dlaczego JVM zmieni kolejność tych instrukcji? –
@ ElliottFrisch hi. Te dokładne wartości służą do zilustrowania, że a, b i c nie mogą być monotonicznie zwiększane; nie musi być 10, 20 i 15 :-P –
@ ElliottFrisch Co dotyczy, czy istnieje gwarancja, że te 3 System.currentTimeMillis() nie zostaną zmienione przez JVM? –