English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Différence entre volatile et transient en Java

Le mot-clé volatile est utilisé dans un environnement multithreadé où deux threads lisent et écrivent simultanément la même variable. Le mot-clé volatile actualise directement les modifications dans la mémoire principale, pas dans le cache CPU. 

D'autre part, le mot-clé transient est utilisé pendant le processus de sérialisation. Les champs marqués comme transitoires ne peuvent pas faire partie de la sérialisation et de la désérialisation. Nous ne voulons pas sauvegarder la valeur de toute variable, alors nous utilisons le mot-clé transient avec cette variable. 

NuméroCléVolatilBrève
1
De base 
Le mot-clé volatile est utilisé pour actualiser directement les modifications dans la mémoire principale
Les mots-clés transitoires sont utilisés pour exclure les variables pendant la sérialisation 
2。
Valeur par défaut 
La volatilité n'utilise pas les valeurs par défaut pour l'initialisation.
Pendant la désérialisation, les variables transientes seront initialisées avec des valeurs par défaut 
3
Statique 
La volatilité peut être utilisée avec des variables statiques.
Ne peut pas être utilisé avec la keyword static temporairement
4
Enfin 
Peut être utilisé avec la keyword final
La volatilité ne peut pas être utilisée avec la keyword final

Exemple transient

// Une classe d'exemple qui utilise la keyword transient pour
//Ignorer sa sérialisation.
class TransientExample implements Serializable {
   transient int age;
   //Sérialiser d'autres champs
   private String name;
   private String address;
   //Autres codes
}

Exemple de volatilité

class VolatileExmaple extends Thread{
   boolean volatile isRunning = true;
   public void run() {
      long count = 0;
      while (isRunning) {
         count++;
      }
      System.out.println("Thread terminated."); + count);
   }
   public static void main(String[] args) throws InterruptedException {
      VolatileExmaple t = new VolatileExmaple();
      t.start();
      Thread.sleep(2000);
      t.isRunning = false;
      t.join();
      System.out.println("isRunning set to "); + t.isRunning);
   }
}