Quelqu'un peut-il expliquer ce que signifient les modificateurs transient
et volatile
en Java?
Réponses
Trop de publicités?L' volatile
et transient
modificateurs s'appliquent à des champs de classes.
L' transient
modificateur raconte l'Java sérialisation d'un objet sous-système d'exclure du champ lors de la sérialisation d'une instance de la classe. Lorsque l'objet est ensuite désérialisé, le champ est initialisé à la valeur par défaut; c'est à dire null
d'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 qu' transient
moyen, mais renvoie à la Java Sérialisation d'un Objet de la Spécification. D'autres non-standard de sérialisation mécanismes peuvent également prêter attention à un champ transient
-ness.
L' volatile
modificateur raconte la JVM qui écrit dans le champ doit toujours être en mode synchrone vidés de la mémoire, et qui lit du champ doit toujours lire à partir de la mémoire. Cela signifie que les champs marqués, alors que la volatilité accessible en toute sécurité et mis à jour dans multi-thread de l'application sans l'aide de maternelle ou de la bibliothèque standard à base de synchronisation. De même, les lectures et les écritures à la volatilité des champs sont atomiques. (Ceci ne s'applique pas aux non-volatile long
ou double
champs, qui peuvent être soumis à "mot de déchirure" sur certaines machines virtuelles.) Les parties pertinentes de la JLS sont 8.3.1.4, 17.4 et de 17,7.
Volatilité des moyens autres threads peuvent modifier cette variable. Ainsi, le compilateur permet d'avoir accès à eux.
http://www.javamex.com/tutorials/synchronization_volatile.shtml
Transitoire signifie que lorsque vous sérialiser un objet, il sera de retour à sa valeur par défaut sur la dé-sérialisation