In JDK 1.6, Doug Lea utilizza final
precedendo il campo next
.Diversa voce `next` di ConcurrentHashMap in JDK 1.6 e JDK 1.7
static final class HashEntry<K,V> {
final K key;
final int hash;
volatile V value;
final HashEntry<K,V> next;
Mentre in JDK 1.7, il campo next
è preceduta da volatile
. Inoltre noto che in JDK 1.7 il metodo get
adotta il metodo getObjectVolatile
per leggere il campo value
, che ha la semantica del carico volatile.
Non ho senso perché Doug Lea utilizzi in precedenza final
. Se ci sono problemi di correttezza, come potrebbe sostituirlo con volatile
in JDK 1.7 (anche JDK 1.8)?
Edit:
In particolare, la mia domanda è che potremmo sostituire final
con volatile
nell'attuazione JDK 1.6 di?
Questa classe non è in CHM in Java 8. – assylias
OK, se questa è la tua domanda, allora no, non puoi. Il motivo per cui il modificatore è stato modificato è che l'implementazione è stata completamente cambiata. Questo non è un cambiamento isolato. – RealSkeptic
@RealSkeptic, potresti presentare alcuni dettagli o articoli per la spiegazione? Grazie. –