English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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éro | Clé | Volatil | Brè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 |
// 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 }
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); } }