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

java偏向锁,轻量级锁与重量级锁为什么会相互膨胀?

正在看《深入理解java虚拟机》 对于锁膨胀不是很明白。
首先偏向锁,我理解偏向锁和轻量级锁之间区别是在获取锁的过程中,是否有CAS操作。但是为什么偏向锁不能直接替代轻量级锁,什么场景是轻量级锁能够解决但是偏向锁无法解决的呢?

第二个 书上402页上面说“如果有两条以上的线程竞争用同一个锁,轻量级锁就不再有效,要膨胀为重量级锁”,我的理解上不需要大于两个线程,等于两个线程的竞争情况下,也需要膨胀对吗?

PHP中文网PHP中文网2717 Il y a quelques jours482

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

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:31:58

    Pourquoi avez-vous besoin d'autant de cadenas ? Étant donné que différents verrous occupent différentes ressources, tout est conçu pour utiliser moins de ressources et accélérer l'exécution du programme.

    Première question.
    Verrouillage biaisé : après des recherches antérieures, l'auteur de Hotspot a constaté que dans la plupart des cas, non seulement il n'y a pas de concurrence multithread pour les verrous, mais qu'il est également toujours acquis plusieurs fois par le même thread afin d'en faire le coût. les threads acquérant des verrous inférieurs, des verrous biaisés ont été introduits. Convient aux scénarios dans lesquels un thread accède à un bloc de code synchronisé.

    Verrouillage léger : utilisé dans des scénarios où la concurrence n'est pas très intense ou où les blocs de code synchronisés s'exécutent rapidement. Il ne bloquera pas mais tournera. (Après avoir tourné plusieurs fois, je n'ai toujours pas obtenu le verrou et je ne l'ai pas amélioré en un verrou lourd)

    Le deuxième problème est que le verrou léger n'a pas obtenu le verrou après plusieurs rotations (la rotation peut être comprise comme un cycle), et il se dilatera quel que soit le nombre de threads.

    Ce qui précède est ma compréhension personnelle, veuillez vous référer à cet article d'Infoq.

    répondre
    0
  • Annulerrépondre