java偏向锁,轻量级锁与重量级锁为什么会相互膨胀?
PHP中文网
PHP中文网 2017-04-18 10:29:58
0
1
538

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

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

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(1)
伊谢尔伦

Mengapa anda memerlukan banyak kunci? Oleh kerana kunci yang berbeza menduduki sumber yang berbeza, semuanya direka untuk menggunakan kurang sumber dan pelaksanaan program dengan lebih cepat.

Soalan pertama.
Kunci berat sebelah: Selepas penyelidikan terdahulu, pengarang Hotspot mendapati bahawa dalam kebanyakan kes, bukan sahaja tiada persaingan berbilang benang untuk kunci, tetapi juga sentiasa diperoleh beberapa kali oleh benang yang sama Untuk membuat kos benang yang memperoleh kunci lebih rendah, kunci berat sebelah diperkenalkan. Sesuai untuk senario di mana satu utas mengakses blok kod disegerakkan.

Kunci ringan: Digunakan dalam senario di mana persaingan tidak begitu sengit atau blok kod disegerakkan dilaksanakan dengan cepat. Ia tidak akan menyekat tetapi berputar. (Selepas berputar beberapa kali, saya masih belum mendapatkan kunci itu dan menaik tarafnya kepada kunci kelas berat)

Masalah kedua ialah kunci ringan tidak memperoleh kunci selepas berputar beberapa kali (putaran boleh difahami sebagai gelung), dan ia akan mengembang tanpa mengira bilangan benang.

Perkara di atas adalah pemahaman peribadi saya, sila rujuk artikel oleh Infoq ini.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan