Maison  >  Article  >  Synchroniser deux fois sur le même objet ?

Synchroniser deux fois sur le même objet ?

WBOY
WBOYavant
2024-02-06 11:45:09501parcourir
Contenu de la question

J'aimerais savoir si en java, si je synchronise deux fois sur le même objet, il y aura un comportement bizarre ?

La scène est la suivante

pulbic class SillyClassName {

    object moo;
    ...
    public void method1(){
        synchronized(moo)
        {
            ....
            method2();
            ....
        }
    }

    public void method2(){
        synchronized(moo)
        {
            doStuff();
        }
    }
}

Les deux méthodes utilisent cet objet et se synchronisent dessus. Lorsque la première méthode appelle la deuxième méthode, la deuxième méthode s’arrêtera-t-elle car elle est verrouillée ?

Je ne pense pas puisque c'est le même fil de discussion, mais je ne sais pas si d'autres résultats étranges se produisent.


La bonne réponse


peut être saisie à nouveau

Les blocs synchronisés utilisent des verrous réentrants, ce qui signifie que si un thread détient déjà un verrou, il peut le réacquérir sans aucun problème. Votre code fonctionnera donc comme prévu.

Voir Tutoriel Java en bas de la page Verrouillages intrinsèques et synchronisation.

Citation en janvier 2015...

Je pense que nous devons utiliser un verrou réentrant pour accomplir ce que vous voulez faire. Voici un extrait de http: //docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReentrantLock.html.

Bien que je ne l'ai pas essayé, je pense que si vous voulez faire ce qui précède, vous devez utiliser un verrou réentrant.

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