java - lock与synchronize的解锁顺序问题?
怪我咯
怪我咯 2017-04-18 10:49:35
0
2
714

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

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

谢谢各位!

怪我咯
怪我咯

走同样的路,发现不同的人生

répondre à tous(2)
小葫芦

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.

左手右手慢动作
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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!