Que sont les modificateurs transitoires et volatiles?

Quelqu’un peut-il expliquer ce que signifient les modificateurs transient et volatile en Java?

Les modificateurs volatile et transient s’appliquent aux champs de classes.

Le modificateur transient indique au sous-système de sérialisation d’object Java d’exclure le champ lors de la sérialisation d’une instance de la classe. Lorsque l’object est ensuite désérialisé, le champ sera initialisé à la valeur par défaut; c’est-à-dire null pour un type de référence et zéro ou false pour un type primitif. Notez que le JLS (voir 8.3.1.3 ) ne dit pas ce que signifie transient , mais renvoie à la spécification de sérialisation d’object Java . D’autres mécanismes de sérialisation non standard peuvent également faire attention à la transitivité d’un champ.

Le modificateur volatile indique à la JVM que les écritures dans le champ doivent toujours être vidées de manière synchrone en mémoire et que les lectures du champ doivent toujours être lues depuis la mémoire. Cela signifie que les champs marqués comme volatiles peuvent être accédés et mis à jour en toute sécurité dans une application multi-thread sans utiliser la synchronisation native ou standard basée sur la bibliothèque. De même, les lectures et écritures sur des champs volatils sont atomiques. (Cela ne s’applique pas aux >> champs long ou double non volatiles, qui peuvent être soumis à une “déchirure de mot” sur certaines machines virtuelles Java .) Les parties pertinentes du JLS sont 8.3.1.4 , 17.4 et 17.7 .

Volatile signifie que d’autres threads peuvent modifier cette variable particulière. Le compilateur leur permet donc d’y accéder.

http://www.javamex.com/tutorials/synchronization_volatile.shtml

Transient signifie que lorsque vous sérialisez un object, il retournera sa valeur par défaut lors de la désérialisation

http://www.geekinterview.com/question_details/2

mots clés volatile et transient

1) le mot-clé transient est utilisé avec les variables d’instance pour les exclure du processus de sérialisation. Si un champ est transient sa valeur ne sera pas conservée.

D’autre part, le mot-clé volatile est utilisé pour marquer une variable Java comme étant “stockée dans la mémoire principale”.

Chaque lecture d’une variable volatile sera lue à partir de la mémoire principale de l’ordinateur, et non du cache du processeur, et chaque écriture sur une variable volatile sera écrite dans la mémoire principale et pas uniquement dans le cache du processeur.

2) le mot-clé transient ne peut pas être utilisé avec static mot-clé static mais volatile peut être utilisé avec static .

3) transient variables transient sont initialisées avec la valeur par défaut pendant la désérialisation et leur affectation ou leur restauration doit être traitée par le code de l’application.

Pour plus d’informations, consultez mon blog:
http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html