java / expert
Snippet
Feingranulare Memory Barriers mit VarHandles
VarHandles bieten einen Standardweg für atomare Operationen und Memory Fencing. 'setRelease' stellt sicher, dass alle vorherigen Schreibvorgänge im aktuellen Thread für andere Threads sichtbar sind, die einen 'acquire' Load ausführen – effizienter als 'volatile' für spezifische Muster.
snippet.java
1
2
3
4
5
6
7
8
9
10
private static final VarHandle STATE_VH;static {try {STATE_VH = MethodHandles.lookup().findVarHandle(Node.class, "state", int.class);} catch (Exception e) { throw new Error(e); }}public void releaseState() {STATE_VH.setRelease(this, 1);}
Erklärung
1
findVarHandle(Node.class, "state", int.class)
Verknüpft dynamisch einen Handle mit einem Feld für Low-Level-Zugriffe.
2
STATE_VH.setRelease(this, 1)
Schreibt den Wert mit 'release'-Semantik, was als einseitige Memory Barrier fungiert.