Kunci ialah antara muka, dan pelaksanaan yang paling biasa digunakan ialah ReentrantLock Salah satu fleksibilitinya ialah ia boleh menetapkan parameter adil.
ReentrantLock dengan synchronized dan fair=false tidak dapat menentukan susunan penguncian. Dalam erti kata lain, benang A, B, dan C semuanya mengunci objek Kali pertama mereka cuba mengunci ialah A, kemudian B, dan akhirnya C. Kemudian apabila A membuka kunci objek, ia tidak dapat ditentukan sama ada B atau C akan mengunci. objek seterusnya.
Jika anda menggunakan fair=true ReentrantLock (kunci adil), keadaan ditentukan: apabila A membuka kunci objek, memandangkan B cuba mengunci objek sebelum C, B mesti menguncinya seterusnya, dan hanya apabila B membuka kunci, gilirannya kepada C.
new lock1
new lock2
lock1.lock();
lock2.lock();
...
lock2.unlock();
lock1.unlock();
Pengunci dan buka kunci Lock dilaksanakan pada tahap semantik java, dan tidak ada hubungan yang diperlukan antara kunci
synchronized(obj1){
synchronized(obj2){
...
}
}
synchronized buka kunci dilaksanakan oleh JVM Ia akan membuka kunci sendiri selepas melaksanakan blok synchronized Semua akan dibuka dalam susunan bersarang synchronized.
Kunci ialah antara muka, dan pelaksanaan yang paling biasa digunakan ialah ReentrantLock Salah satu fleksibilitinya ialah ia boleh menetapkan parameter adil.
ReentrantLock dengan synchronized dan fair=false tidak dapat menentukan susunan penguncian. Dalam erti kata lain, benang A, B, dan C semuanya mengunci objek Kali pertama mereka cuba mengunci ialah A, kemudian B, dan akhirnya C. Kemudian apabila A membuka kunci objek, ia tidak dapat ditentukan sama ada B atau C akan mengunci. objek seterusnya.
Jika anda menggunakan fair=true ReentrantLock (kunci adil), keadaan ditentukan: apabila A membuka kunci objek, memandangkan B cuba mengunci objek sebelum C, B mesti menguncinya seterusnya, dan hanya apabila B membuka kunci, gilirannya kepada C.
Pengunci dan buka kunci
Lock
dilaksanakan pada tahap semantik java, dan tidak ada hubungan yang diperlukan antara kuncisynchronized
buka kunci dilaksanakan oleh JVM Ia akan membuka kunci sendiri selepas melaksanakan bloksynchronized
Semua akan dibuka dalam susunan bersarangsynchronized
.