Lorsque la concurrence pour les ressources n'est pas très féroce, les performances de Synchronized sont meilleures que celles de ReetrantLock, mais lorsque la concurrence pour les ressources est féroce, les performances de Synchronized chuteront des dizaines de fois, mais les performances de ReetrantLock peuvent rester normales
(1) Pourquoi est-ce ?
(2) ReentrantLock est-il un verrou léger ? Que sont les serrures légères ? Je n'ai entendu parler que de ce nom, mais je n'ai jamais vu de mise en œuvre concrète
Lors de l'utilisation de synchronisé, si le programme ne s'exécute pas correctement, une exception sera levée, mais aucun travail de nettoyage ne sera effectué. Utiliser ReentrantLock vous permet d'essayer d'acquérir un verrou mais finalement de ne pas l'acquérir, de sorte que si quelqu'un d'autre a acquis le verrou, vous pouvez partir faire autre chose (mais ce que je veux faire maintenant, c'est effectuer certaines opérations après avoir acquis le verrou ), cela n'a pas beaucoup de sens de passer à autre chose maintenant), au lieu d'attendre que le verrou soit libéré.
Tout d'abord, la situation que vous avez mentionnée n'existait que lorsque ReentrantLock a été introduit pour la première fois dans Java 1.5. Java 1.6 a modifié l'algorithme d'implémentation synchronisé, qui est fondamentalement cohérent avec l'implémentation de ReentrantLock, de sorte que la différence de performances entre les deux est déjà très faible. .
Concernant les verrous légers, il s'agit d'un moyen d'améliorer les performances des verrous introduit dans Java 1.6. Il appartient au niveau JVM et il n'y a pas d'implémentation spécifique.
Si vous souhaitez attendre que le verrou soit libéré, vous pouvez utiliser Lock.lock() pour obtenir le verrou. L'utilisation de Lock.tryLock() tente d'obtenir le verrou et ne pourra peut-être pas l'obtenir.
On peut comprendre simplement que les pages de lecture et d'écriture synchronisées s'excluent mutuellement, mais ReentrantLock a des verrous de lecture et d'écriture qui peuvent être partagés, mais les verrous d'écriture s'excluent mutuellement. Si vous le regardez d'ici, ReentrantLock lira plus et. écrivez moins. Les performances seront beaucoup plus élevées, mais le code est plus compliqué que synchronisé et il est facile de causer des problèmes si le contrôle n'est pas bon.