Rumah  >  Soal Jawab  >  teks badan

Bagaimanakah reentrantlock mengunci objek tertentu?

Jika saya mempunyai objek tatasusunan dengan panjang 10:

Object[] arr=new Object[10];

Akses kepada setiap objek adalah saling eksklusif, tetapi akses antara berbilang objek boleh serentak.
Kemudian menggunakan disegerakkan anda boleh melakukan ini:

synchoronized(arr[i]){
    //...
}

Saya ingin bertanya, bagaimana untuk melaksanakan kunci sedemikian jika menggunakan reentrantlock?

Nota: Adakah saya perlu mencipta 10 tatasusunan Kunci pada masa yang sama untuk senario penggunaan ini? Lock[] lockList=new ReentrantLock[10]

if(lockList[i].trylock())[
    //
}

Adakah ini?

扔个三星炸死你扔个三星炸死你2686 hari yang lalu868

membalas semua(1)saya akan balas

  • 代言

    代言2017-06-12 09:27:57

    Kunci permulaan:

    Lock[] lockList = new ReentrantLock[10];
    for (int i = 0; i < 10; i ++) {
        lockList[i] = new ReentrantLock();
    }
    

    Apabila penguncian diperlukan:

    lockList[i].lock();
    try {
        ...
    } finally {
        lockList[i].unlock();
    }

    balas
    0
  • Batalbalas