Supongamos que tengo una variable privada y tengo un método setVariable()
que es synchronized
, ¿no es exactamente lo mismo que usar el modificador volatile
?es una variable volátil sincronizada? (java)
Respuesta
No. Volatile significa que la variable no se almacena en caché en ningún caché por subproceso, y su valor siempre se recupera de la memoria principal cuando es necesario. La sincronización significa que esos cachés por hilo se mantendrán sincronizados en ciertos puntos. En teoría, usar una variable volátil puede tener una gran penalización de velocidad si muchos hilos necesitan leer el valor de la variable, pero se cambia solo en raras ocasiones.
volatile
variables no están sincronizadas (al menos, no en la forma en que synchronized
cosas están sincronizadas). Lo que hace volatile
es asegurarse de que se recupera una variable cada vez que se usa (es decir, evita ciertos tipos de optimización), y de IIRC que se lee y escribe en el orden correcto. Esto podría emular algunos tipos de sincronización, pero no puede funcionar igual si su setter tiene que configurar más de una cosa. (Si establece dos volatile
variables, por ejemplo, habrá un punto en el que se establece uno y el otro no lo es.)
En realidad Nº
volatile
es en realidad forma más débil de sincronización, cuando se declara campo como volatile
, el compilador y el tiempo de ejecución entienden que este variable
se comparte y las operaciones que se realizan en él no se deben reordenar con otras operaciones de memoria. Las variables volátiles no se almacenan en caché en registros o en cachés donde están ocultas de otros procesadores, por lo que una lectura de una variable volatile
siempre devuelve una escritura reciente de cualquier subproceso.
sólo un ejemplo:
First thread run :
while(stopped){
... do something
}
Second thread run :
stopped = true;
es útil para declarar dejado como un booleano volátil para la primera rosca para tener un valor fresco de la misma.
No, llamar a synchronized
El método getXXX/setXXX no es lo mismo que leer/escribir en una variable volatile
.
Varios hilos pueden leer simultáneamente o escribir en una variable volatile
. Pero solo un hilo a la vez puede leer o escribir en una variable protegida por un bloque synchronized
.
No hay ninguna relación.
Básicamente
- volátil => siempre recupera último valor del parámetro
- sincronizada => sólo sirve 1 hilo al mismo tiempo
- 1. Variable volátil
- 2. Pregunta sincronizada Java
- 3. ¿Debo sincronizar una variable volátil estática?
- 4. Java Lista sincronizada
- 5. Java volátil pregunta variables
- 6. ¿Puede la variable volátil definirse como estática en Java?
- 7. Java lista sincronizada de bucle
- 8. matriz volátil Java?
- 9. Si declaro una variable de instancia como volátil, ¿el objeto de esta clase será volátil?
- 10. Mezcla volátil y sincronizada como un bloqueo de lectura y escritura
- 11. Modificador volátil Java y bloques sincronizados
- 12. ¿Es necesario volátil aquí?
- 13. ¿Es necesario declarar una AtomicReference como volátil?
- 14. Java referencia volátil vs AtomicReference
- 15. ¿Qué ocurre después de escribir en una variable volátil?
- 16. ¿Volátil o sincronizado para el tipo primitivo?
- 17. ¿Por qué una variable de miembro Object no puede ser definitiva y volátil en Java?
- 18. ¿Por qué 'esto' no es volátil?
- 19. Palabra clave volátil en Java - Clarificación
- 20. anidada sincronizada palabra clave
- 21. Mezcla sincronizada() con ReentrantLock.lock()
- 22. java - ¿Tengo que declarar mi variable de miembro de escucha compartida como volátil?
- 23. ¿Tiene Delphi algún equivalente a la variable volátil de C?
- 24. Enclavado y volátil
- 25. ¿Cómo puedo usar correctamente la palabra clave volátil en Java?
- 26. ¿Cuándo utiliza exactamente la palabra clave volátil en Java?
- 27. ¿Cómo funciona realmente el volátil?
- 28. WPF - animación sincronizada
- 29. ¿Por qué es 'parasitario' volátil en C++?
- 30. ¿Dónde usar volátil?
Si se requiere algún tipo de sincronización, aren' ¿Estás hablando de penalizaciones de velocidad de todos modos? (Generalmente, no tiene mucho sentido sincronizar las escrituras si no estás sincronizando las lecturas también ...) – cHao