Java 8 hat sun.misc.Unsafe
drei Zäune hinzugefügt.Java Unsafe.storeFence() Dokumentation falsch?
Ich fühle mich verwirrt, nachdem ich ihre Dokumentation gelesen habe.
Also suchte ich im Internet, und fand diese link.
Laut der obigen Seite, glaube ich, diese Methoden hinzufügen fast nichts in der Praxis. Korrigieren Sie mich, wenn ich falsch liege, Grob gesagt, loadFence(), storeFence() und fullFence() entsprechen volatilem Lesen, Lazy Write bzw. flüchtigem Schreiben, obwohl technisch diese Zäune stärker sind als flüchtige Variablen. So ist loadFence() ein acquire fence, und storeFence() ist ein Freisetzungszaun und fullFence() ist ein full fence.
Aber dann sieht die Dokumentation für storeFence() seltsam aus.
Es sagt,
/**
* Ensures lack of reordering of stores before the fence
* with loads or stores after the fence.
*/
void storeFence();
Das ist nicht wie ein Release Zaun aussieht. Wie soll es verwendet werden? Sollte nicht es
/**
* Ensures lack of reordering of loads or stores before the fence
* with stores after the fence.
*/
void storeFence();
Ich gehe davon aus vor bedeutet früher und nach bedeutet später.
EDIT
meine ich nicht „wir sie nicht in üblichen Entwicklung verwenden“, wenn ich sagen, dass diese „Zäune nichts in der Praxis hinzufügen“.
Ich meine, auch ohne diese Methoden in Unsafe, können wir diese "Zäune" bekommen. Wenn ich in der Praxis richtig bin, hat das Lesen eines Dummy-Volatile den Effekt von loadFence(), und das Schreiben eines Dummy-Volatile hat den Effekt von fullFence(), und unsafe.putOrderedXXX() (oder AtomicInteger.lazySet()) hat den Effekt von storeFence().
Sie können einen kleinen Unterschied haben, aber in der aktuellen Implementierung sind sie austauschbar. (Scheint durch den Link impliziert)
Das ist, was ich mit "sie fügen nichts Neues" bedeuten.
ANOTHER EDIT
Diese bereits festgelegt ist.
Siehe https://bugs.openjdk.java.net/browse/JDK-8038978
Thanks @ john-Vint
Eine [Implementierung link] (http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/50fdb38839eb/src /share/vm/opto/library_call.cpp#l3102), was hilfreich sein könnte. –