Maison  >  Questions et réponses  >  le corps du texte

java - lock与synchronize的解锁顺序问题?

在学习lock与synchronize的区别时,看到这样一句话:“ lock更灵活,可以自由定义多把锁的枷锁解锁顺序(synchronized要按照先加的后解顺序)”。请问这里:

1.lock的自由定义多把锁的枷锁解锁顺序怎么理解?
2.synchronized要按照先加的后解顺序怎么理解?

谢谢各位!

怪我咯怪我咯2743 Il y a quelques jours717

répondre à tous(2)je répondrai

  • 高洛峰

    高洛峰2017-04-18 10:51:35

    Lock est une interface, et l'implémentation la plus couramment utilisée est ReentrantLock. L'une de ses flexibilités est qu'elle peut définir le paramètre fair.

    ReentrantLock avec synchronisé et fair=false ne peut pas déterminer l'ordre de verrouillage. En d'autres termes, les threads A, B et C verrouillent tous l'objet. La première fois qu'ils tentent de verrouiller, c'est A, puis B et enfin C. Ensuite, lorsque A déverrouille l'objet, il ne peut pas être déterminé si B ou C va se verrouiller. l'objet ensuite.

    Si vous utilisez fair=true ReentrantLock (fair lock), la situation est déterminée : lorsque A déverrouille l'objet, puisque B essaie de verrouiller l'objet avant C, B doit le verrouiller ensuite, et ce n'est que lorsque B déverrouille le tour à C.

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:51:35

    new lock1
    new lock2
    
    lock1.lock();
    lock2.lock();
    ...
    lock2.unlock();
    lock1.unlock();

    Le verrouillage et le déverrouillage de Lock sont implémentés au niveau sémantique Java, et il n'y a pas de relation nécessaire entre les verrous

    synchronized(obj1){
        synchronized(obj2){
            ...
        }
    }
    Le déverrouillage

    synchronized est implémenté par la JVM. Il se déverrouillera après l'exécution du bloc synchronized. Tous seront déverrouillés dans l'ordre d'imbrication de synchronized.

    répondre
    0
  • Annulerrépondre