Maison  >  Article  >  Java  >  Introduction aux quatre méthodes utilisées par synchronisé

Introduction aux quatre méthodes utilisées par synchronisé

不言
不言avant
2018-10-08 15:16:523344parcourir

Cet article vous présente les quatre méthodes d'utilisation synchronisées. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

1. Modifier une méthode
synchronisée Modifier une méthode est très simple, il suffit d'ajouter synchronisé devant la méthode, par exemple :

public synchronized void method()
{
   // todo
}

Quand définition d'une méthode d'interface Le mot-clé synchronisé ne peut pas être utilisé.
Les méthodes constructeur ne peuvent pas utiliser le mot-clé synchronisé, mais peuvent utiliser des blocs de code synchronisés pour la synchronisation.
Le mot-clé synchronisé ne peut pas être hérité. Si vous souhaitez synchroniser, vous devez ajouter le mot-clé explicitement.
La méthode modifiée par le mot-clé synchronisé sera désynchronisée par défaut si elle est remplacée. Si vous souhaitez synchroniser, vous devez ajouter le mot-clé explicitement, ou la méthode de la classe super parent est équivalente à la synchronisation.

2. Modifier le bloc de code

public  void method()
{
   synchronized(this)
   synchronized(XX.class)
}

synchronisé(ceci) verrouille l'objet actuel S'il y a actuellement plusieurs objets, alors il y a plusieurs copies de celui-ci. , ici Cela ne peut verrouiller que le même objet.
synchronized(XX.class) Ce verrou est utile tant qu'il s'agit d'une classe de ce type

Lorsque deux threads simultanés accèdent au bloc de code de synchronisation synchronisé(this) dans le même objet, un seul un thread peut être exécuté à la fois. Un autre thread doit attendre que le thread actuel ait fini d'exécuter ce bloc de code avant de pouvoir exécuter ce bloc de code. Lorsqu'un thread accède à un bloc de code synchronisé (this) d'un objet, un autre thread peut toujours accéder au bloc de code synchronisé non synchronisé (this) dans l'objet. Ce qui est particulièrement critique est que lorsqu'un thread accède à un bloc de code synchronisé (this) d'un objet, l'accès des autres threads à tous les autres blocs de code synchronisés (this) dans l'objet sera bloqué.
Le troisième exemple s'applique également à d'autres blocs de code synchronisés. C'est-à-dire que lorsqu'un thread accède à un bloc de code synchronisé d'un objet, il obtient le verrou d'objet de cet objet. En conséquence, l'accès des autres threads à toutes les parties de code synchronisées de l'objet objet est temporairement bloqué.
Les règles ci-dessus sont également applicables à d'autres verrous d'objets

3. Modifier les méthodes statiques
Nous savons que les méthodes statiques appartiennent à des classes et non à des objets. De même, la méthode statique modifiée par synchronisé verrouille tous les objets de cette classe, et toutes les classes auront un effet de verrouillage lors de son utilisation

public synchronized static void method() {
   // todo
   }

4. Modifier une classe
Le La portée de l'effet est la partie entre parenthèses après la synchronisation, et les objets de l'effet sont tous des objets de cette classe. Tant qu'il s'agit d'une classe de ce type, elle fonctionnera quel que soit le nombre d'objets. Le code suivant

class ClassName {
    public void method() {
       synchronized(ClassName.class) {
                 // todo       
                 }
    }
 }

résumé :

A. Que le mot-clé synchronisé soit ajouté à une méthode ou à un objet, si l'objet sur lequel il agit est non statique, le verrou il acquiert l'objet ; Si l'objet sur lequel la synchronisation agit est une méthode statique ou une classe, le verrou qu'il acquiert est le même pour tous les objets de la classe.
B. Chaque objet n'est associé qu'à un seul verrou. Celui qui obtient ce verrou peut exécuter le code qu'il contrôle.
C. La réalisation de la synchronisation nécessite beaucoup de temps système et peut même provoquer un blocage, alors essayez d'éviter un contrôle de synchronisation inutile.
D. Le mot-clé de synchronisation verrouille l'objet

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer