2010-08-24 3 views
4

La variable suivante, x, doit-elle être volatile?Java: Toutes les variables mutables doivent-elles être volatiles lors de l'utilisation de verrous?

Ou est-ce que la manipulation dans un verrou utils.concurrent remplit la même fonction qu'un bloc synchronisé (en s'assurant qu'il est écrit en mémoire et non stocké dans le cache cpu)?

myMethod(){ 
    myLock.lock(); 
    x++; 
    myLock.unlock(); 
} 
+2

En code réel, vous déverrouillez dans la clause 'finally', n'est-ce pas? –

+0

Bon point Alexandre, oui, je viens de me rendre compte que c'était un problème à moi et j'ai dû fixer du code pour mettre le déblocage dans des blocs finalement. –

Répondre

4

De telles variables doivent uniquement être volatiles si elles sont accédées ailleurs sans verrou. Par exemple, en tant qu'accès rapide en lecture seule à une variable de taille. Les méthodes de verrouillage servent le même but qu'un bloc synchronisé. Voir la section "Synchronisation de la mémoire" dans javadoc pour la classe Lock.

Questions connexes