Tengo algunas preguntas sobre la asignación de Java.Problemas de asignación Java - ¿Esto es atómico?
- Cuerdas
Tengo una clase:
public class Test {
private String s;
public synchronized void setS(String str){
s = s + " - " + str;
}
public String getS(){
return s;
}
}
estoy usando "sincronizado" en mi organismo, y evitar que en mi captador, porque en mi aplicación, hay toneladas de datos que se obtienen y muy pocas configuraciones. La configuración debe estar sincronizada para evitar inconsistencias. Mi pregunta es: ¿conseguir y establecer una variable atómica? Es decir, en un entorno multiproceso, Thread1 está a punto de establecer la variable s, mientras que Thread2 está a punto de obtener "s". ¿Hay alguna forma en que el método getter pueda obtener algo diferente al antiguo valor de s o al nuevo valor de s (supongamos que tenemos solo dos hilos)? En mi aplicación no es un problema obtener el nuevo valor, y no es un problema obtener el anterior. ¿Pero podría obtener algo más?
- ¿Qué pasa con la obtención y colocación de HashMap?
teniendo en cuenta esto:
public class Test {
private Map<Integer, String> map = Collections.synchronizedMap(new HashMap<Integer, String>());
public synchronized void setMapElement(Integer key, String value){
map.put(key, value);
}
public String getValue(Integer key){
return map.get(key);
}
}
está poniendo y conseguir atómica? ¿Cómo maneja HashMap poniendo un elemento en él? ¿Quita primero el valor anterior y pone el ahora? ¿Podría obtener un valor diferente al anterior o nuevo?
¡Gracias de antemano!
+1 para especificar que los lectores no necesitan ver el último valor absoluto. Por supuesto, eso definitivamente debe documentarse en el código de producción. –