¿Qué operaciones en Java se consideran atómicas?
Respuestas:
y quizás algo más. Mira el jls .
Como se señaló en los comentarios, la atomicidad no implica visibilidad. Entonces, aunque se garantiza que otro hilo no verá un escrito parcialmente int
, es posible que nunca vea el nuevo valor.
Las operaciones en long y double también se realizan en CPU atómicas comunes de 64 bits , aunque no hay garantía. Consulte también esta solicitud de función .
64 bit jvm, long and double assignments are also atomic.
¿Estás seguro? Yo diría que son para código compilado, pero ¿qué pasa con el código interpretado? Probablemente tengas razón, pero ¿hay alguna garantía?
En Java, se garantiza que la lectura y escritura de cantidades de 32 bits o menores son atómicas.
Por atómico, queremos decir que cada acción tiene lugar en un paso y no puede interrumpirse. Por lo tanto, cuando tenemos aplicaciones multiproceso, las operaciones de lectura y escritura son seguras para los subprocesos y no es necesario sincronizarlas.
Por ejemplo, el siguiente código es seguro para subprocesos:
public class ThreadSafe
{
private int x;
public void setX(int x)
{
this.x = x;
}
}
Sería parece que las asignaciones de posiciones largas son atómicas, sobre la base de este método en AtomicLong.java:
public final void set(long newValue) {
value = newValue;
}
Tenga en cuenta la ausencia de sincronización.
value
. Es volatile
.
value
es volatile
no realizar la asignación de value
, simplemente evita la "publicación" cuestiones atómicas.
volatile
Se garantiza que las asignaciones a largos y dobles serán atómicas: java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7