java - ejercicios - precedencia de operadores aritmeticos
¿Qué operaciones en Java se consideran atómicas? (3)
En Java, se garantiza que la lectura y escritura de cantidades de 32 bits o menores es atómica.
Por atómico, queremos decir que cada acción tiene lugar en un solo paso y no se puede interrumpir. Por lo tanto, cuando tenemos aplicaciones multiproceso, las operaciones de lectura y escritura son seguras para hilos y no necesitan sincronizarse.
Por ejemplo, el siguiente código es seguro para subprocesos:
public class ThreadSafe
{
private int x;
public void setX(int x)
{
this.x = x;
}
}
¿Qué operaciones en Java se consideran atómicas?
Parecería que las asignaciones de longs son atómicas, basadas en este método en AtomicLong.java:
public final void set(long newValue) {
value = newValue;
}
Tenga en cuenta la ausencia de cualquier sincronización.
- todas las asignaciones de tipos primitivos, excepto el largo y el doble
- todas las asignaciones de referencias
- todas las asignaciones de variables volátiles
- todas las operaciones de las clases java.concurrent.Atomic *
y tal vez algo más. Mira los jls .
Como se señala en los comentarios, la atomicidad no implica visibilidad. Entonces, mientras que otro hilo está garantizado para no ver un int
parcialmente escrito, puede que nunca vea el nuevo valor.
Las operaciones en larga y doble también son comunes en las CPU de 64 bits atómicas , aunque no hay garantía. Ver también esta solicitud de función .