Quelqu'un peut-il expliquer ce transient
que volatile
signifient les modificateurs et en Java?
java
serialization
storage
modifier
Vijay Bhaskar Semwal
la source
la source
Réponses:
Les modificateurs
volatile
ettransient
peuvent être appliqués aux champs des classes 1 quel que soit le type de champ. En dehors de cela, ils ne sont pas liés.Le
transient
modificateur indique au sous-système de sérialisation d'objets Java d'exclure le champ lors de la sérialisation d'une instance de la classe. Lorsque l'objet est ensuite désérialisé, le champ sera initialisé à la valeur par défaut; c'est-null
à- dire pour un type de référence, et zéro oufalse
pour un type primitif. Notez que le JLS (voir 8.3.1.3 ) ne dit pas ce quetransient
signifie, mais s'en remet à la spécification de sérialisation d'objets Java . D'autres mécanismes de sérialisation peuvent prêter attention àtransient
-ness d' un champ . Ou ils peuvent l'ignorer.(Notez que le JLS permet à un
static
champ d'être déclaré commetransient
. Cette combinaison n'a pas de sens pour la sérialisation d'objets Java, car elle ne sérialise pas de toute façon la statique. Cependant, cela pourrait avoir un sens dans d'autres contextes, donc il y a une justification pour pas l'interdire carrément.)Le
volatile
modificateur indique à la machine virtuelle Java que les écritures dans le champ doivent toujours être vidées de manière synchrone dans la mémoire et que les lectures du champ doivent toujours être lues à partir de la mémoire. Cela signifie que les champs marqués comme volatils 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 une bibliothèque. De même, les lectures et les écritures dans les champs volatils sont atomiques. (Ceci ne s'applique pas aux champs >> non volatiles <<long
ou auxdouble
champs, qui peuvent être soumis à un «déchirement de mots» sur certaines JVM.) Les parties pertinentes du JLS sont 8.3.1.4 , 17.4 et 17.7 .1 - Mais pas aux variables ou paramètres locaux.
la source
volatile
ettransient
mots - clés1) Le
transient
mot clé 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
volatile
mot-clé est utilisé pour marquer une variable Java comme "stockée dans la mémoire principale".Chaque lecture d'une
volatile
variable sera lue depuis la mémoire principale de l'ordinateur, et non depuis le cache du processeur, et chaque écriture dans unevolatile
variable sera écrite dans la mémoire principale, et pas seulement dans le cache du processeur.2) Le
transient
mot-clé ne peut pas être utilisé avec lestatic
mot-clé maisvolatile
peut être utilisé avecstatic
.3) les
transient
variables sont initialisées avec la valeur par défaut lors de la désérialisation et l'affectation ou la restauration de la valeur doit être gérée par le code d'application.Pour plus d'informations, consultez mon blog:
http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html
la source
transient
variable ne peut pas être utilisée avec lestatic
mot-clé est que les variables statiques appartiennent à une classe et non à une instance individuelle. Le concept de sérialisation concerne l'état actuel de l'objet. Seules les données associées à une instance spécifique d'une classe sont sérialisées, par conséquent les champs de membres statiques sont ignorés lors de la sérialisationstatic
ettransient
peut être utilisé ensemble. Le problème est que cela n'a pas de sens, car les mécanismes de sérialisation typiques ne persistent pas de toute façon statiques.Volatile signifie que d'autres threads peuvent modifier cette variable particulière. Ainsi, le compilateur permet d'y accéder.
http://www.javamex.com/tutorials/synchronization_volatile.shtml
Transient signifie que lorsque vous sérialisez un objet, il renverra sa valeur par défaut lors de la désérialisation
http://www.geekinterview.com/question_details/2
la source
Transitoire:
Premièrement, il faut savoir où il en a besoin, comment combler le fossé.
1) Un transitoire de modificateur d'accès n'est applicable qu'au composant variable uniquement. Il ne sera pas utilisé avec la méthode ou la classe.
2) Le mot clé transitoire ne peut pas être utilisé avec le mot clé statique.
3) Qu'est-ce que la sérialisation et où est-elle utilisée? La sérialisation est le processus qui rend l'état de l'objet persistant. Cela signifie que l'état de l'objet est converti en un flux d'octets à utiliser pour la persistance (par exemple le stockage des octets dans un fichier) ou le transfert (par exemple l'envoi d'octets sur un réseau). De la même manière, nous pouvons utiliser la désérialisation pour ramener l'état de l'objet à partir d'octets. C'est l'un des concepts importants de la programmation Java car la sérialisation est principalement utilisée dans la programmation réseau. Les objets qui doivent être transmis via le réseau doivent être convertis en octets. Avant de comprendre le mot-clé transitoire, il faut comprendre le concept de sérialisation. Si le lecteur connaît la sérialisation, veuillez ignorer le premier point.
Note 1) Le transitoire est principalement utilisé pour le processus de sérialisation. Pour cela, la classe doit implémenter l'interface java.io.Serializable. Tous les champs de la classe doivent être sérialisables. Si un champ n'est pas sérialisable, il doit être marqué comme transitoire.
Note 2) Lorsqu'un processus désérialisé a lieu, il est défini sur la valeur par défaut - zéro, faux ou nul selon la contrainte de type.
Note 3) Mot-clé transitoire et son objectif? Un champ qui est déclaré avec un modificateur transitoire ne participera pas au processus sérialisé. Lorsqu'un objet est sérialisé (enregistré dans n'importe quel état), les valeurs de ses champs transitoires sont ignorées dans la représentation en série, tandis que le champ autre que les champs transitoires participe au processus de sérialisation. C'est l'objectif principal du mot clé transitoire.
la source