0 votes

Existe-t-il différents niveaux de synchronisation ?

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.

3voto

cletus Points 276888

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.

3voto

Jon Skeet Points 692016

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 ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X