Usted dice que el caché se, sino que también van a actualizar en un intervalo que parece contradictorio de sólo lectura.
Si todo el caché se actualiza en un intervalo, seguiría usando el volátil. El elemento volátil se asegurará de que el mapa actualizado se publique de forma segura.
public final class Cache
{
private volatile Map<?,?> cache;
private void mapUpdate() {
Map<?,?> newCache = new HashMap<>();
// populate the map
// update the reference with an immutable collection
cache = Collections.unmodifiableMap(newCache);
}
}
Si el intervalo de actualización es la modificación de la misma caché, entonces es probable que desee utilizar un ConcurrentHashMap, o copiar el mapa, actualizar la copia, y actualizar la referencia.
public final class Cache
{
private volatile Map<?,?> cache;
private void mapUpdate() {
Map<?,?> newCache = new HashMap<>(cache);
// update the map
// update the reference with an immutable collection
cache = Collections.unmodifiableMap(newCache);
}
}
Si es de solo lectura no necesita ... tampoco. –
'volátil' en un' HashMap' significa que atraviesa una barrera de memoria cuando obtiene/configura el objeto 'HashMap'. No hace nada cuando agrega o elimina elementos del mapa – Gray
@BrianRoach ¿qué usaría? – DarthVader