Rumah  >  Soal Jawab  >  teks badan

java - lock与synchronize的解锁顺序问题?

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

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

谢谢各位!

怪我咯怪我咯2744 hari yang lalu724

membalas semua(2)saya akan balas

  • 高洛峰

    高洛峰2017-04-18 10:51:35

    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.

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 10:51:35

    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.

    balas
    0
  • Batalbalas