1. Concept
Verrou de lecture-écriture réentrant. Le verrou de lecture-écriture maintient un ReadLock et un WriteLock en interne. La couche inférieure est toujours AQS, mais AQS n'a qu'une seule quantité d'état. écrire en même temps ? , Les 16 bits de poids fort de l'état (int) sont utilisés ici pour représenter l'état de lecture, les 16 bits de poids faible représentent l'écriture, les 16 bits de poids fort représentent le nombre de threads qui acquièrent le verrou de lecture et le poids faible 16 bits représentent le numéro réentrant du verrou en écriture.
2. Le principe
est implémenté à l'aide de la file d'attente CAS+AQS. Il prend en charge les verrous équitables et injustes, et la mise en œuvre des deux est similaire
3, exemples
public class ReentrantDemo implements Runnable { Lock lock = new ReentrantLock(); @Override public void run() { set(); } public void set() { try { lock.lock(); System.out.println("set 方法"); get(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock();// 必须在finally中释放 } } public void get() { try { lock.lock(); System.out.println("get 方法"); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } public static void main(String[] args) { ReentrantDemo reentrantDemo = new ReentrantDemo(); new Thread(reentrantDemo).start(); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!