Lesen und Schreiben von Schlössern: In Lesesperrungen unterteilt und Schreibschlösser, leser Leseschlösser nicht, leses Sperrungen und Schreiben von Schlössern, die sich gegenseitig ausschließen, was von JVM selbst gesteuert wird. Wenn Ihr Code nur die Daten liest, können viele Personen gleichzeitig lesen, aber nicht gleichzeitig schreiben, dann lesen Sie die Sperre. Schreiben Sie dann die Lock -Essenz Kurz gesagt, lesen Sie das Schloss beim Lesen und schreiben Sie das Schloss beim Schreiben!
Drei Threads lesen Daten, drei Threads schreiben Daten Beispiel:
Sie können gleichzeitig lesen, Sie können es nicht gleichzeitig schreiben, Sie können nicht gleichzeitig schreiben und Sie können es beim Schreiben nicht lesen.
Lesen Sie das Schloss beim Lesen, lesen Sie das Schloss, wenn Sie schreiben, und das Entsperren.
Achten Sie darauf, endlich freizuschalten.
Paket com.ljq.test.thread; Public static void main (string [] args) {endgültig readwrite rw = new ReadWrite (); {rw.read ();}} .start (); ();}}} /** * Lesen und schreiben Sie sich gegenseitig ausschließlich. Die Daten, aber es gibt mehrere Threads, um die Daten gleichzeitig zu lesen. ReadWriteLock RWL = Neue Re -ins -teadritelock (); .Sleep ((lang) (math.random () * 1000)); {e.printstacktrace ();} endlich {rwl.readlock () (); .Println (Thread.CurrentThread ().
Entwerfen Sie ein Cache -System -Cache -System: Wenn Sie die Daten aufnehmen müssen, müssen Sie meine Methode für das öffentliche Objekt getData (String Key) aufrufen. Das nächste Mal wird jemand zu diesen Daten kommen, und ich werde diese Nummer direkt zurückgeben, ohne sie in der Datenbank zu finden. Finden Sie die Datenbank nicht für Daten, kommen Sie zu mir.
Paket com.ljq.test.thread; System * * * @Author Administrator * */öffentliche Klasse CacheDemo {private map <string, Objekt> cache = new Hashmap <String, Object> (); ; aus Caching} private Readwritelock rwl = neuer Re -ins -teadritelock (); / Überprüfen Sie zuerst, ob im internen Speicher einen Wert vorhanden ist, wenn (value == null) {// Wenn nicht, überprüfen , Schreiben Sie rwl.readlock (). out.println ("Daten aus der Datenbank lesen"); Unlock ();} // RW zur Wiederherstellung des Read- und Schreibstatus rwl.readlock (). Wert;}}
Rückenergebnisse: