Die Hauptforschung zu ReadWriteLock -Funktionen in diesem Artikel wie folgt.
Readlock und Readlock schließen sich nicht gegenseitig aus
Readlock und Writelock schließen sich gegenseitig aus
Writelock und Readlock schließen sich gegenseitig aus
Writelock und Writelock schließen sich gegenseitig aus
Thread 1, ladlock zuerst erhalten, Thread 2 versucht, Readlock zu erhalten, Sie können Thread 1 erhalten, Readlock zuerst erhalten, Thread 2 versucht, Writelock zu erhalten, zu blockieren und zu warten, und Sie können Thread 1 erhalten, bis Thread 1 das Schloss veröffentlichen, und Sie können Thread 1 erhalten, Writelock erhalten, zuerst, erstellen Sie.
Paket com.alio.lock; import Java.Text.SimpledateFormat; Import Java.util.date; import Java.util.Concurrent.locks.lock; ReadWriteLockDemo {static SimpleDateFormat SDF = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss.sss"); public static void main (String [] args) {Datendaten = neue Daten (); true); // lesen t1.start (); t2.Start (); t3.start ();} statische Klasse erweitert Thread {Data data; boolean read; public Worker (Datendaten, boolean read) {thata.data = data; this.read = read;} public void run () {if (read) data.read (); else data.write();}}static class Data {ReadWriteLock lock = new ReentrantReadWriteLock();Lock read = lock.readLock();Lock write = lock.writeLock();public void write() {try {Thread.sleep(2000);//}catch (Exception e) oder Date()));write.unlock();}}public int read() {read.lock();System.out.println(Thread.currentThread()+ " read :begin " + sdf.format(new Date()));try {Thread.sleep(5000);//}catch (Exception e) {} finally {System.out.println(Thread.currentThread() + "Read: End" + SDF.Format (neues Date ())); read.unlock ();} return 1;}}}Thread [Thread-2,5, Main] Lesen: Beginnen Sie 2018-01-22 13: 54: 16.794
Thread [Thread-1,5, Main] Lesen: Beginnen Sie 2018-01-22 13: 54: 16.794
Thread [Thread-2,5, Main] Lesen Sie: Ende 2018-01-22 13: 54: 21.795
Thread [Thread-1,5, Main] Lesen Sie: Ende 2018-01-22 13: 54: 21.795
Thread [Thread-0,5, Main] Schreiben: Beginnen Sie 2018-01-22 13: 54: 21.795
Thread [Thread-0,5, Main] Schreiben: Ende 2018-01-22 13: 54: 26.795
Gleichzeitig wurden drei Threads begonnen, darunter Thread Nr. 1 Thread Thread[Thread-0,5,main], und es schläft 2 Sekunden lang bei der Ausführung des Schreibens. Dann Thread Nr. 2, Thread Nr. 3 Thread[Thread-1,5,main],Thread[Thread-2,5,main] priorisieren die Ausführung von Code
read.lock ();
Seit read.lock(); ist nicht gegenseitig ausschließt (kann wieder eingetragen werden), sie haben das Schloss gleichzeitig erhalten, was durch das Protokoll gesehen werden kann
Thread [Thread-2,5, Main] Lesen: Beginnen Sie 2018-01-22 13: 54: 16.794 Thread [Thread-1,5, Main] Lesen: Beginnen Sie 2018-01-22 13: 54: 16.794
Und ihre Ausführungszeit ist gleich (der Testcode schläft 5 Sekunden), sodass die Ausführung auch gleichzeitig endet.
Thread [Thread-2,5, Main] Lesen Sie: Ende 2018-01-22 13: 54: 21.795 Thread [Thread-1,5, Main] Lesen Sie: Ende 2018-01-22 13: 54: 21.795
Nur wenn alle Readlocks veröffentlicht werden, kann Writelock das Schloss erhalten. Zu diesem Zeitpunkt wird die Sperre veröffentlicht, nachdem die Ausführung von Thread [Thread-1,5, Main] und Thread [Thread-2,5, Main] veröffentlicht werden.
Also wurde Thread[Thread-0,5,main] Writelock erhalten und zu diesem Zeitpunkt seine eigene Geschäftsordnung ausgeführt
Thread [Thread-0,5, Main] Schreiben: Beginnen Sie 2018-01-22 13: 54: 21.795 Thread [Thread-0,5, Main] Schreiben Sie: Ende 2018-01-22 13: 54: 26.795
Im obigen dreht sich alles um den Beispieltest für die Funktion von Java Language ReadWriteLock, ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!