J'ai entendu dire qu'il y avait différents niveaux de synchronisation. Est-ce le cas ? (Si c'est le cas, pourriez-vous les expliquer à l'aide d'un extrait de code ?) Merci.
Réponses
Trop de publicités?Avant Java 5, il n'y en avait qu'un seul : le synchronized
mot-clé. Cela a permis d'attendre et d'obtenir un verrou exclusif sur l'objet de référence. Lorsqu'il est appliqué à une fonction :
public synchronized void doStuff() { ... }
l'objet sur lequel la synchronisation est effectuée est this
.
Java 5 a ajouté un grand nombre d'utilitaires de concurrence, dont l'un était la fonction Lock
objet. Il existe plusieurs versions de cet objet, dont une ReadWriteLock
. C'est la seule chose à laquelle je pense à laquelle vous pourriez faire référence.
Le problème avec synchronized
c'est qu'il est assez grossier. Mal utilisé, il peut conduire à des blocages. Les utilitaires de Java 5 permettent l'acquisition de verrous non bloquants, le délai d'attente pour l'acquisition de verrous et le support des verrous en lecture/écriture.
Il faudrait vraiment expliquer ce que vous entendez par "niveau de synchronisation". Parlez-vous de la différence entre :
public synchronized void foo()
{
...
}
y
public void foo()
{
synchronized(lock)
{
...
}
}
? Ou peut-être entre ce qui précède et l'utilisation des serrures de java.util.concurrent.locks ?
Si vous pouviez donner plus de contexte à ce que vous avez entendu, nous pourrions être en mesure de mieux vous aider. Plus important encore, quel problème essayez-vous de résoudre pour lequel vous pensez avoir besoin de ces informations ?