Como cualquier otro lenguaje de programación, Java tiene un conjunto de palabras clave que están reservadas y tienen un significado especial. En este artículo, veremos la diferencia entre las palabras clave volátil y transitorio.
Antes de entrar en las diferencias, primero comprendamos qué significa realmente cada uno de ellos.
Volátil :
La palabra clave volátil se usa para marcar la JVM y el subproceso para leer su valor de la memoria principal y no utilizar el valor almacenado en caché presente en la pila de subprocesos. Se utiliza en programación concurrente en java.
Java
class GFG extends Thread { // using volatile volatile boolean working = true; // if non-volatile it will // sleep in main and // runtime error will coocur public void run() { long count = 0; while (working) { count++; } System.out.println("Thread terminated." + count); } // Driver code public static void main(String[] args) throws InterruptedException { GFG test = new GFG(); test.start(); Thread.sleep(100); System.out.println("After Sleeping in Main"); test.working = false; test.join(); System.out.println("Working set to " + test.working); } }
Producción:
La palabra clave Transient se usa con la variable de instancia para eliminarla del proceso de serialización. Durante la serialización, el valor del campo transitorio o variable no se guarda.
Java
import java.io.*; class Test implements Serializable { // Making Accesskey transient for security transient String accessKey; // Making age transient as age can be // calculated from Date of Birth // and current date. transient int age; // serialize other fields String name, address; public Test(String accessKey, int age, String name, String address) { this.accessKey = accessKey; this.age = age; this.name = name; this.address = address; } } public class GFG { public static void main(String[] args) throws Exception { ObjectInputStream in = new ObjectInputStream( (new FileInputStream( "login_details.txt"))); Test obj = (Test)in.readObject(); /* Transient variable will be shown null due to security reasons.*/ System.out.println("Accesskey: " + obj.accessKey); System.out.println("Age: " + obj.age); System.out.println("Name: " + obj.name); System.out.println("Address: " + obj.address); } }
Producción:
La siguiente tabla describe las diferencias:
Transitorio | Volátil |
---|---|
La variable transitoria marcada impide que se serialice. | La variable marcada como Volátil sigue la relación anterior a la visibilidad en el programa Java de subprocesos múltiples, lo que reduce el riesgo de errores de consistencia de la memoria. |
Brinda control y flexibilidad para excluir algunos métodos de objetos del proceso de serialización. | Evita que JVM realice reordenaciones, lo que podría comprometer la sincronización. |
Durante la deserialización, se inicializan con un valor predeterminado. | No se inicializan con un valor predeterminado. |
No se puede usar con la palabra clave estática ya que la variable estática no pertenece a una instancia individual. Durante la serialización, solo se trata del estado actual del objeto. | Se puede utilizar con la palabra clave estática. |
No se puede utilizar con la palabra clave final. Aunque JVM no se queja de eso, pero durante la deserialización uno enfrentará el problema de reinicializar una variable. | Se puede utilizar con la palabra clave final. |
Publicación traducida automáticamente
Artículo escrito por shivamraj74 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA