Les principales recherches sur les fonctionnalités de ReadWriteLock dans cet article, comme suit.
readlock et readlock ne s'excluent pas mutuellement
Readlock et WriteLock s'excluent mutuellement
WriteLock et Readlock s'excluent mutuellement
writelock et writelock s'excluent mutuellement
Thread 1, Get Readlock First, Thread 2 essaie d'obtenir Readlock, vous pouvez obtenir le thread 1, obtenir Readlock en premier, Thread 2 essaie d'obtenir WriteLock, bloquer et attendre, et vous pouvez obtenir du thread 1 jusqu'à ce que Thread 1 libère le verrou, et vous pouvez obtenir du thread 1, obtenir un WriteLock d'abord, le thread 1, obtenir le fil de filetage en premier, le thread 2 Tries pour obtenir l'écriture.
package com.alio.lock; import java.text.simpledateformat; import java.util.date; import java.util.concurrent.locks.lock; import java.util.concurrent.locks.readwritelock; SimpledateFormat sdf = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss.sss"); public static void main (String [] args) {data data = new data (); worker t1 = new Worker (data, false); // write wearch t2 = new Worker (data, true); // lire wearch t3 = new Worker t1.start (); t2.start (); t3.start ();} la classe statique du travailleur étend Thread {data data; booléen read; travailleur public (données de données, booléen read) {this.data = data; this.read = read;} public void run () {if (read) data.read (); else data.write ();}} data de classe statique {readwritelock lock = new reentRanTreadWriteLock (); Lock read = lock.readlock (); lock write = lock.writeLock (); public void write () {try {thread.sleep (2000); //} catch (exception e) {} write.lock (); system.out.printLn (exception e) {} write.lock (); System.out.printLn (Exception e) {} write.lock (); System.out.printLn (Exception e) {} write.lock (); System.out.Println (Exception E) + "write: begin" + sdf.format (new Date ())); try {thread.sleep (5000); //} catch (exception e) {} enfin {System.out.println (thread.currentThread () + "write: end" + sdf.format (new Date ()); write.unlock ();}}} public int read () gens Date ())); read.unlock ();} return 1;}}}Thread [Thread-2,5, Main] Lire: Begin 2018-01-22 13: 54: 16.794
Thread [Thread-1,5, Main] Lire: Begin 2018-01-22 13: 54: 16.794
Thread [Thread-2,5, Main] Lire: Fin 2018-01-22 13: 54: 21.795
Thread [Thread-1,5, Main] Lire: Fin 2018-01-22 13: 54: 21.795
Thread [Thread-0,5, Main] Write: Begin 2018-01-22 13: 54: 21.795
Thread [Thread-0,5, Main] Write: End 2018-01-22 13: 54: 26.795
Trois threads ont été lancés en même temps, parmi lesquels du thread n ° 1 du thread Thread[Thread-0,5,main], et il dort 2 secondes lors de l'exécution d'écriture. Puis le thread n ° 2, thread n ° 3 Thread[Thread-1,5,main],Thread[Thread-2,5,main] priorise l'exécution du code
read.lock ();
Depuis read.lock(); n'est pas mutuellement exclusif (peut être réentrant), ils ont obtenu la serrure en même temps, ce qui peut être vu à travers le journal
Thread [Thread-2,5, Main] Lire: Begin 2018-01-22 13: 54: 16.794thread [Thread-1,5, Main] Lire: Begin 2018-01-22 13: 54: 16.794
Et leur surcharge de temps d'exécution est la même (le code de test dort pendant 5 secondes), donc l'exécution se terminera également en même temps.
Thread [Thread-2,5, Main] Lire: Fin 2018-01-22 13: 54: 21.795thread [Thread-1,5, Main] Lire: Fin 2018-01-22 13: 54: 21.795
Ce n'est que lorsque tous les blocs de lecture peuvent être publiés que WriteLock obtiendra le verrou. À l'heure actuelle, le verrou sera libéré après l'exécution de Thread [Thread-1,5, Main] et Thread [Thread-2,5, Main] sera libéré.
Donc Thread[Thread-0,5,main] a obtenu WriteLock et a exécuté son propre code d'entreprise pour le moment
Thread [Thread-0,5, Main] Write: Begin 2018-01-22 13: 54: 21.795thread [Thread-0,5, Main] Write: End 2018-01-22 13: 54: 26.795
Ce qui précède est tout au sujet de l'exemple de test de la fonctionnalité de lecture de Language Java, j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!