Quello che so è che writelock è proprio come sincronizzato.ReentrantReadWriteLock, qual è la differenza tra ReadLock e WriteLock
Readlock e blocco scrittura si influenzano l'un l'altro in qualche modo.
ReadLock non sembra funzionare da solo.
Quello che so è che writelock è proprio come sincronizzato.ReentrantReadWriteLock, qual è la differenza tra ReadLock e WriteLock
Readlock e blocco scrittura si influenzano l'un l'altro in qualche modo.
ReadLock non sembra funzionare da solo.
readLock.lock();
Ciò significa che se qualsiasi altro filo è scrittura (cioè contiene un blocco scrittura) poi fermarsi qui fino nessun altro thread sta scrivendo.
Una volta concesso il blocco, nessun altro thread sarà autorizzato a scrivere (ad esempio, prendere un blocco di scrittura) finché il blocco non viene rilasciato.
writeLock.lock();
Questo significa che se qualsiasi altro thread è leggendo o scrittura, fermarsi qui e aspettare fino a quando nessun altro thread sta leggendo o scrivendo.
volta che il blocco viene concessa, nessun altro thread sarà permesso di leggere o scrittura (cioè fa una lettura o scrittura serratura) finché il blocco viene rilasciato.
La combinazione di questi si può organizzare per un solo thread alla volta per avere accesso in scrittura, ma come molti lettori che vuoi può leggere allo stesso tempo, tranne quando un thread sta scrivendo.
In un altro modo. Ogni volta che vuoi leggere dalla struttura, prendi un leggi il blocco. Ogni volta che si desidera scrivere, prendere un blocco . In questo modo ogni volta che una scrittura accade, nessuno sta leggendo (puoi immaginare di avere un accesso esclusivo), ma ci possono essere molti lettori che leggono allo stesso tempo finché nessuno sta scrivendo.
La documentazione per ReadWriteLock
chiarisce questo punto:
Un ReadWriteLock mantiene una coppia di blocchi associati, uno per operazioni di sola lettura e uno per la scrittura. Il blocco di lettura può essere tenuto simultaneamente da più thread di lettura, purché non ci siano scrittori. Il blocco di scrittura è esclusivo.
Così puoi avere molti lettori alla volta, ma solo uno scrittore - e lo scrittore impedirà anche ai lettori di leggere. Ciò è utile se hai qualche risorsa che è sicura da leggere da più thread e dove la lettura è molto più comune della scrittura, ma quando la risorsa non è in realtà di sola lettura. (Se non ci sono gli scrittori e la lettura è sicuro, non c'è alcun bisogno di una serratura a tutti.)
Quando un thread acquisisce una WriteLock
, nessun altro thread può acquisire la ReadLock
né la WriteLock
della stessa istanza di ReentrantReadWriteLock
, a meno che quel thread rilascia il blocco. Tuttavia, più thread possono acquisire lo ReadLock
allo stesso tempo.
+1 buona spiegazione. Solo per chiarimenti, con "uno" intendi "filo". –