¿Puede alguien explicar qué significan los modificadores transient
y volatile
en Java?¿Qué son los modificadores transitorios y volátiles? -
Respuesta
Volatile significa que otros subprocesos pueden editar esa variable en particular. Entonces el compilador les permite el acceso.
http://www.javamex.com/tutorials/synchronization_volatile.shtml
transitoria significa que al serializar un objeto, éste volverá a su valor por defecto en de-serialización
"Por lo que el compilador permite el acceso a ellos". Su oración sugiere que los hilos no tienen acceso por defecto. Ahora leo el enlace y entiendo la otra respuesta: el compilador no hace ningún tipo de almacenamiento intermedio específico de subprocesos de la variable para que otros subprocesos puedan ver los cambios inmediatamente. – helios
Obtuve el uso de C de los volátiles y el uso de volátil de Java. Quise decir que el compilador asegura que tiene acceso al valor de actaul del campo en lugar de un valor en caché. – Raynos
significa más que eso. –
Los volatile
y transient
modificadores se aplican a los campos de clases.
El modificador transient
le dice al subsistema de serialización de objetos Java que excluya el campo al serializar una instancia de la clase. Cuando el objeto se deserializa, el campo se inicializará al valor predeterminado; es decir, null
para un tipo de referencia, y cero o false
para un tipo primitivo. Tenga en cuenta que el JLS (consulte 8.3.1.3) no indica lo que significa transient
, sino que difiere al Java Object Serialization Specification. Otros mecanismos de serialización no estándar también pueden prestar atención al campo transient
-ness.
El modificador volatile
le dice a la JVM que las escrituras en el campo siempre se deben enjuagar de forma síncrona en la memoria, y que las lecturas del campo siempre deben leerse desde la memoria. Esto significa que los campos marcados como volátiles se pueden acceder y actualizar de forma segura en una aplicación de múltiples subprocesos sin utilizar la sincronización nativa o estándar basada en la biblioteca. Del mismo modo, las lecturas y escrituras en campos volátiles son atómicas. (Esto no se aplica a >> no volátil < < long
o double
campos, que pueden ser objeto de "palabra desgarre" en algunas JVM). Las partes pertinentes de la JLS son 8.3.1.4, 17.4 y 17.7.
Transitorio: el modificador transitorio se aplica solo a variables y no se almacena como parte del estado persistente de su objeto. Las variables transitorias no están serializadas. Volátil: el modificador volátil se aplica únicamente a las variables y le dice al compilador que la variable modificada por el volátil puede cambiarse inesperadamente por otras partes del programa. –
@Vijay - Incorrecto. Las variables transitorias * podrían * ser serializadas, dependiendo de qué mecanismo de serialización se use. La Especificación del lenguaje Java no especifica esto. Tu definición de volátil también es incorrecta. Las variables volátiles y no volátiles pueden cambiarse inesperadamente por alguna otra parte de un programa. Volátil simplemente proporciona una semántica más estricta para leer y escribir con respecto al modelo de memoria de Java. –
@Vijay - también transitorio y volátil * solo * se aplica a los campos de clases. * No * se aplican a las variables locales. –
palabra clave volátil y transitoria
1) palabras clave transitoria se utiliza junto con las variables de instancia para excluirlas de proceso de serialización. Si un campo es transitorio, su valor no se mantendrá.
Por otro lado, la palabra clave volátil se utiliza para marcar una variable de Java como "está almacenada en la memoria principal".
Cada lectura de una variable volátil se leerá en la memoria principal de la computadora, y no desde la memoria caché de la CPU, y cada escritura en una variable volátil se escribirá en la memoria principal y no solo en la memoria caché de la CPU.
2) la palabra clave transitoria no se puede utilizar junto con la palabra clave estática, pero se puede usar volátil junto con la estática.
3) las variables transitorias se inicializan con el valor predeterminado durante la deserialización y la asignación o restauración del valor debe ser manejada por el código de la aplicación.
Para obtener más información, vea mi blog:
http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html
- 1. ¿Por qué los modificadores de lectura y volátiles son mutuamente excluyentes?
- 2. ¿Por qué los métodos Java con varargs identificados como transitorios?
- 3. ¿Cuáles son los modificadores de acceso predeterminados en C#?
- 4. campos transitorios finales y serialización
- 5. Java: campos transitorios estáticos
- 6. Diferencia entre los modificadores de expresiones regulares 'm' y 's'?
- 7. PostgreSQL expresiones volátiles y subconsultas
- 8. ¿Por qué std :: cout convierte los punteros volátiles en bool?
- 9. ¿Qué son los archivos .sln y .vcproj, y qué contienen?
- 10. ¿Qué son los sombreadores Vertex y Pixel?
- 11. ¿Qué son los archivos .a y .so?
- 12. ¿por qué usar volátiles con bloque sincronizado?
- 13. ¿Qué son los RFC?
- 14. ¿Por qué los volátiles y MemoryBarrier no impiden el reordenamiento de operaciones?
- 15. ¿Qué son los conceptos?
- 16. ¿Qué son los futuros?
- 17. Semántica de Estructuras Volátiles
- 18. ¿Por qué las variables en Java no son volátiles por defecto?
- 19. ¿Qué son aserciones? y por qué los usarías?
- 20. ¿Qué son los Proxies WCF y para qué sirven?
- 21. ¿Por qué los EJB son seguros y los servlets no?
- 22. ¿Qué son los bytecodes y cómo los maneja JVM?
- 23. ¿Los modificadores de acceso afectan el rendimiento?
- 24. En C, ¿cómo declaras que los miembros de una estructura son volátiles?
- 25. ¿Cuál es la diferencia entre los especificadores de acceso y los modificadores de acceso?
- 26. Diferencia en volátiles en C# y C
- 27. . Modelo de memoria .NET, variables volátiles y prueba y conjunto: ¿qué se garantiza?
- 28. ¿Los modificadores de línea de comando ruby -rubygems & -r son incompatibles?
- 29. Usos de volátiles sin sincronización
- 30. ¿Qué son los objetos anclados?
Esto claramente no era una pregunta y esto es un duplicado de todos modos (que es por eso he votado para cerrar). Ver por ejemplo [¿Por qué Java tiene variables transitorias?] (Http: // stackoverflow.com/questions/910374/why-does-java-have-transient-variables) y [¿Cuándo exactamente usa la palabra clave volátil en Java?] (http://stackoverflow.com/questions/3488703/when-exactly-do -you-use-the-volátil-keyword-in-java) (y muchos otros). –
posible duplicado de [¿Para qué se usa "volátil"?] (Http://stackoverflow.com/questions/3430757/for-what-is-used-volatile) – Jeff
Esta es una pregunta perfectamente válida, equivalente a: http: //stackoverflow.com/questions/215497/in-java-whats-the-difference-between-public-default-protected-and-private/215505 –