Cuál es la diferencia entre atómico / volátil / sincronizado?
¿Cómo funcionan internamente atómico / volátil / sincronizado?
¿Cuál es la diferencia entre los siguientes bloques de código?
Code 1
private int counter;
public int getNextUniqueIndex() {
return counter++;
}
Code 2
private AtomicInteger counter;
public int getNextUniqueIndex() {
return counter.getAndIncrement();
}
Code 3
private volatile int counter;
public int getNextUniqueIndex() {
return counter++;
}
Hacevolatile
trabajar de la siguiente manera? E
volatile int i = 0;
void incIBy5() {
i += 5;
}
equivalente
Integer i = 5;
void incIBy5() {
int temp;
synchronized(i) { temp = i }
synchronized(i) { i = temp + 5 }
}
Creo que dos hilos no pueden entrar en un bloque sincronizado al mismo tiempo ... ¿estoy en lo cierto? Si esto es cierto, ¿cómo funcionaatomic.incrementAndGet()
trabajar sinsynchronized
? ¿Y es seguro para subprocesos?
¿Y cuál es la diferencia entre lectura interna y escritura en variables volátiles / variables atómicas? Leí en algún artículo que el hilo tiene una copia local de las variables, ¿qué es eso?