Si une longue variable est déclarée comme suit: - p>
Compteur long volatile privé = 0; strong> p>
MAINTENANT Si je l'incrète à l'aide de l'opérateur de pré-augmentation, l'opération sera-t-elle atomique? P>
Si oui, alors sera-t-il plus efficace que java.util.concurrent.atomic.atomiclong code> incrément de l'objet ?? p>
4 Réponses :
Un autre article qui est sorti aujourd'hui: démontrer lorsqu'il est nécessaire lorsque la volatilité est requise P> volatile code> Le mot clé ne résout que Visibilité problème. Vous devez utiliser atomiclong code> ou synchronisé code> méthode / bloc pour atomicité ( Atomicité dans la programmation simultanée ). P>
+1 J'ai appris un nouveau terme, "atomicité". J'aurais probablement l'atome d'atomique ou atomictueuse. :-)
@ user949300 atomicité est un mot approprié utilisé dans le monde simultané et DBMS
@Pangea est-ce juste visibilité code> uniquement ou Commander code> aussi?
L'opérateur de pré-augmentation est pas em> atomique. De plus, l'incrémentation d'un long code> est susceptible d'être moins efficace que d'utiliser atomiclong code> sur presque toutes les plates-formes, car ce dernier est supporté par le matériel. P>
La réponse courte est n °, vous devrez synchroniser la méthode qui incristez le compteur, de préférence, utilisez un atomiclong. p>
Pour l'enregistrement, ++ Les opérateurs ne sont pas atomiques même sur les entiers em>. p>
Une variable volatile n'est pas la même qu'une variable atomique. P>
Pour les variables volatiles, le compilateur Java tentera de minimiser les commandes de mélange autour de l'efficacité (ne me posez pas les détails de cela ..), d'éviter les problèmes de concurrence. P>
Les variables atomiques sont explicitement fabriquées pour les opérations atomiques, comme dans votre cas incrémentant une variable atomique. P>
L'utilisation d'un opérateur de pré-augmentation ne change pas le fait que l'incrémentation est une opération non atomique.
Comme l'a dit MRE, ce n'est pas atomique. Ce qui se passe (fondamentalement) est que la valeur est chargée, puis incrémentée puis la valeur incrémentée sera à nouveau stockée. Ainsi, ce n'est pas atomique. Jetez un coup d'œil à Ceci