Considere una variable de tipo primitivo con muchos hilos de lectura y algunos hilos escribiendo, ¿funcionará correctamente el siguiente código?Mezcla volátil y sincronizada como un bloqueo de lectura y escritura
Si lo hace, ¿ofrece un mejor rendimiento que 1). declarando sincronizado en todos los métodos; 2). usando un ReadWriteLock explícito?
¿Es este un patrón común? Si no, ¿qué patrón se usa generalmente en esta situación?
Esto actualmente funciona bien para mí, pero creo que es un poco redundante usar tanto volátil como sincronizado.
private volatile int value = 1;
public void func1()
{
if (value == 1) {
// do something
}
}
public void func2()
{
if (value == 2) {
// do something
}
}
public void func3()
{
if (value == 3) {
// do something
}
}
public synchronized void increase()
{
if (value < 10) value++;
}
public synchronized void decrease()
{
if (value > 0) value--;
}
+1 excelente artículo, una "lectura obligatoria" para cualquier persona que quiera comprender mejor los volátiles – Cerber