Чтение и записи блокировки: разделенные на блокировки чтения и записывающие блокировки, несколько блокировки чтения не выговоры, читайте блокировки и запишите блокировки взаимоисключающих, которые контролируются самими JVM. Если ваш код считывает только данные, многие люди могут прочитать одновременно, но не могут писать одновременно, прочитайте блокировку; , затем напишите сущность блокировки Короче говоря, прочитайте блокировку при чтении, и напишите блокировку при написании!
Три потока считывают данные, три потока записать пример данных:
Вы можете прочитать одновременно, вы не можете написать это одновременно, вы не можете писать одновременно, и вы не можете прочитать его при написании.
Прочитайте блокировку, когда вы читаете, прочитайте разблокировку;
Обратите внимание на наконец разблокировать.
Пакет com.ljq.test.thread; Public static void main (string [] args) {final Readwrite rw = new Readwrite (); {rw.read ();}} .start (); ();}}} /** * Читать и написать взаимоисключающую, поэтому поместите их в тот же класс * * @authouse Administrator * * /Class Readwrite {private Object Data = null; Данные, но есть несколько потоков для чтения данных одновременно. Readwritelock rwl = new reentrantreadwritelock (); .sleep ((long) (math.random () * 1000)); {e.printstacktrace ();} наконец -то {rwl.readlock () (); .println (Thread.currentThread (). getName () + "Написать данные:" + data);
Разработайте систему кеша кэша: если вам нужно взять данные, вам нужно позвонить в мой общедоступный объект GetData (String Key). В следующий раз кто -то придет к этим данным, и я верну этот номер непосредственно, не найдя его в базе данных. Не найдите базу данных для данных, приходите ко мне.
Пакет com.ljq.test.thread; System * * * @author Administrator * */Public Class Cachedemo {Private Map <String, Object> Cache = New Hashmap <String, Object> (); ; Кэширование} Частный чтения / Сначала проверьте, есть ли значение во внутренней памяти if (value == null) {// Если нет, зарегистрируйтесь в базе данных, чтобы перейти в базу данных, и сохраните найденные результаты во внутренней памяти // Отпустите блокировку чтения , напишите rwl.readlock (). out.println («Читать данные из базы данных»); Разблокировать ();} // rw для восстановления статуса чтения и записи rwl.readlock (). ценить;}}
Результаты назад: