Membaca dan Menulis Kunci: Dibagi menjadi kunci baca dan kunci menulis, beberapa kunci baca tidak menegur, membaca kunci dan menulis kunci yang saling eksklusif, yang dikendalikan oleh JVM itu sendiri. Jika kode Anda hanya membaca data, banyak orang dapat membaca secara bersamaan, tetapi tidak dapat menulis pada saat yang sama, maka baca kunci; , lalu tulis esensi kunci Singkatnya, baca kunci saat membaca, dan tulislah kunci saat menulis!
Tiga utas membaca data, tiga utas menulis data contoh:
Anda dapat membaca secara bersamaan, Anda tidak dapat menulisnya secara bersamaan, Anda tidak dapat menulis pada saat yang sama, dan Anda tidak dapat membacanya saat menulis.
Baca kunci saat Anda membaca, baca buka kunci;
Perhatikan akhirnya membuka kunci.
paket com.ljq.test.thread; Public static void main (string [] args) {final readwrite rw = new readWrite (); {rw.read ();}} .start (); ();}}} /** * Baca dan tulislah yang saling eksklusif, jadi letakkan di kelas yang sama * * @Authouse Administrator * * /kelas ReadWrite {data objek privat = null; // Bagikan data, hanya satu utas yang dapat menulis Data, tetapi ada beberapa utas untuk membaca data secara bersamaan. Readwritelock RWL = ReentrantreadWritelock () baru; .sleep ((long) (math.random () * 1000)); {E.PrintStackTrace ();} Akhirnya {rwl.readlock () (); .println (thread.currentThread (). getName () + "Miliki data tulis:" + data);
Desain Sistem Cache Cache Sistem: Jika Anda perlu mengambil data, Anda perlu menghubungi metode GetData Objek Publik saya (Kunci String). , seseorang akan datang ke data ini lain kali, dan saya akan mengembalikan nomor ini secara langsung tanpa menemukannya di database. Jangan menemukan database untuk data, datanglah kepada saya.
paket com.ljq.test.thread; Sistem * * * @Author Administrator * */CacheDemo kelas publik {private Map <String, Object> Cache = HashMap baru <String, Object> (); ; Dari Caching} Private ReadWritelock RWL = REENTRANTREADWRITELOCK () yang baru); / Pertama periksa apakah ada nilai dalam memori internal IF (value == null) {// jika tidak, periksa dalam database untuk pergi ke database, dan simpan hasil yang ditemukan di memori internal // Lepaskan kunci baca , lock rwl.readlock (). out.println ("Baca data dari database"); Buka ();} // rw untuk mengembalikan status baca dan tulis rwl.readlock (). nilai;}}
Hasil punggung: