Java Synchronisé Bloc pour .classe
Ce que fait ce code java veux dire? Il gain de verrouillage sur tous les objets de MyClass
?
synchronized(MyClass.class) {
//is all objects of MyClass are thread-safe now ??
}
Et comment le code ci-dessus diffère de celui-ci:
synchronized(this) {
//is all objects of MyClass are thread-safe now ??
}
- Connexes: stackoverflow.com/questions/437620/...
Vous devez vous connecter pour publier un commentaire.
L'extrait de
synchronized(X.class)
utilise l'instance de classe comme un moniteur. Comme il n'existe qu'une seule instance de la classe (l'objet représentant la classe de métadonnées au moment de l'exécution) un thread peut être dans ce bloc.Avec
synchronized(this)
la résidence est gardée par l'instance. Pour chaque instance d'un thread peut entrer dans le bloc.synchronized(X.class)
est utilisée pour s'assurer qu'il y a exactement un Thread dans le bloc.synchronized(this)
assure qu'il y a exactement un thread par exemple. Si cela rend le code dans le bloc thread-safe dépend de la mise en œuvre. Si muter seulement de l'état de l'instancesynchronized(this)
est assez.Pour ajouter d'autres réponses:
est équivalent à
et
est équivalent à
synchronized
blocs. Qui les rend équivalents. Si vous modifiez un exemple, ils sont en effet n'est plus le même.Non, la première sera d'obtenir un verrou sur la définition de la classe de
MyClass
, pas toutes ses instances. Toutefois, si utilisé dans une instance, cela aura pour effet de bloquer tous les autres cas, puisqu'ils partagent une seule et unique définition de la classe.Le second recevra un verrou sur l'instance en cours seulement.
Si cela rend vos objets thread-safe, qui est bien plus complexe de la question -, nous aurions besoin de voir votre code!