Maison > Questions et réponses > le corps du texte
在学习lock与synchronize的区别时,看到这样一句话:“ lock更灵活,可以自由定义多把锁的枷锁解锁顺序(synchronized要按照先加的后解顺序)”。请问这里:
1.lock的自由定义多把锁的枷锁解锁顺序怎么理解?
2.synchronized要按照先加的后解顺序怎么理解?
谢谢各位!
高洛峰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.
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
.