Apabila persaingan sumber tidak begitu sengit, prestasi Synchronized lebih baik daripada ReetrantLock, tetapi apabila persaingan sumber sengit, prestasi Synchronized akan menurun berpuluh-puluh kali ganda, tetapi prestasi ReetrantLock boleh kekal normal
(1) Mengapa ini?
(2) Adakah ReentrantLock kunci ringan? Apakah kunci ringan? Saya hanya mendengar nama ini, tetapi saya tidak pernah melihat sebarang pelaksanaan konkrit
Apabila menggunakan disegerakkan, jika ralat berlaku semasa operasi program, pengecualian akan dilemparkan, tetapi tiada kerja pembersihan akan dilakukan. Menggunakan ReentrantLock membolehkan anda mencuba mendapatkan kunci tetapi akhirnya tidak memperolehnya, supaya jika orang lain telah memperoleh kunci itu, anda boleh meninggalkan untuk melaksanakan perkara lain (tetapi apa yang saya mahu lakukan sekarang ialah melakukan operasi tertentu selepas memperoleh kunci itu ), nampaknya tidak masuk akal untuk beralih kepada melaksanakan perkara lain sekarang), dan bukannya menunggu sehingga kunci dilepaskan.
Pertama sekali, situasi yang anda nyatakan hanya wujud apabila ReentrantLock pertama kali diperkenalkan dalam Java 1.5 Java 1.6 telah mengubah suai algoritma pelaksanaan Disegerakkan, yang pada asasnya konsisten dengan pelaksanaan ReentrantLock, jadi perbezaan prestasi antara kedua-duanya sudah sangat kecil. .
Mengenai kunci ringan, ini adalah cara untuk meningkatkan prestasi kunci yang diperkenalkan dalam Java 1.6 Ia tergolong dalam tahap JVM dan tiada pelaksanaan khusus.
Jika anda ingin menunggu sehingga kunci dilepaskan, anda boleh menggunakan Lock.lock() untuk mendapatkan kunci Menggunakan Lock.tryLock() cuba mendapatkan kunci dan mungkin tidak dapat mendapatkan kunci.
Boleh difahami secara ringkas bahawa halaman baca dan tulis yang disegerakkan adalah saling eksklusif, tetapi ReentrantLock mempunyai kunci baca dan tulis boleh dikongsi, tetapi kunci tulis adalah saling eksklusif tulis kurang. Prestasinya akan jauh lebih tinggi, tetapi kodnya lebih rumit daripada disegerakkan, dan masalah boleh berlaku dengan mudah jika kawalannya tidak baik.