Ma question se rapporte à la question de savoir si l'utilisation d'un ReentrantLock garantit la visibilité d'un champ au même titre que le mot clé synchronized.Le mot clé volatile est-il requis pour les champs accessibles via un ReentrantLock?
Par exemple, dans la classe suivante A, le champ shareddata n'a pas besoin d'être déclarée volatile comme le mot-clé synchronisé est utilisé. Pour l'exemple suivant utilisant un ReentrantLock, le mot-clé volatil est-il nécessaire dans le champ?
class B
{
private final ReentrantLock lock = new ReentrantLock();
private volatile double sharedData;
public void method()
{
lock.lock();
try
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
finally
{
lock.unlock();
}
}
}
Je sais que l'utilisation du mot-clé volatile imposera de toute façon que probablement un coup de performance miniscule, mais je voudrais encore coder correctement.
Ce conseil est-il vrai en ce qui concerne 'while (field)' en raison du levage sur le terrain? – Pod
@Pod: Sans plus de détails sur la façon dont la boucle while interagit avec le verrou, c'est impossible à dire. Vous voulez probablement créer une nouvelle question avec un exemple spécifique. –