¿Qué operaciones en Java se consideran atómicas?
java
multithreading
atomicity
robinmag
fuente
fuente
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.764 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; } }
fuente
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.
fuente
value
. Esvolatile
.value
esvolatile
no realizar la asignación devalue
, simplemente evita la "publicación" cuestiones atómicas.