suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Wie sperrt Reentrantlock ein bestimmtes Objekt?

Wenn ich ein Array-Objekt der Länge 10:

habe
Object[] arr=new Object[10];

Der Zugriff auf jedes Objekt schließt sich gegenseitig aus, der Zugriff zwischen mehreren Objekten kann jedoch gleichzeitig erfolgen.
Dann können Sie mit synchonized Folgendes tun:

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

Ich würde gerne fragen, wie man eine solche Sperre implementiert, wenn man Reentrantlock verwendet?

Hinweis: Muss ich für dieses Nutzungsszenario 10 Lock-Arrays gleichzeitig erstellen? Lock[] lockList=new ReentrantLock[10]

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

Ist das so?

扔个三星炸死你扔个三星炸死你2809 Tage vor945

Antworte allen(1)Ich werde antworten

  • 代言

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

    初始化锁:

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

    需要加锁时:

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

    Antwort
    0
  • StornierenAntwort