java - lock与synchronize的解锁顺序问题?
怪我咯
怪我咯 2017-04-18 10:49:35
0
2
769

在学习lock与synchronize的区别时,看到这样一句话:“ lock更灵活,可以自由定义多把锁的枷锁解锁顺序(synchronized要按照先加的后解顺序)”。请问这里:

1.lock的自由定义多把锁的枷锁解锁顺序怎么理解?
2.synchronized要按照先加的后解顺序怎么理解?

谢谢各位!

怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua(2)
小葫芦

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.

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