Lectura y escritura de bloqueos: dividido en cerraduras de lectura y bloqueos de escritura, múltiples bloqueos de lectura no reprimen, leen cerraduras y escriben bloqueos mutuamente excluyentes, que está controlado por JVM. Si su código solo lee los datos, muchas personas pueden leer al mismo tiempo, pero no pueden escribir al mismo tiempo, lea el bloqueo; , luego escribe la esencia de bloqueo En resumen, lea la cerradura al leer y escriba el bloqueo al escribir.
Tres hilos leen datos, tres hilos escriben datos de datos:
Puede leer al mismo tiempo, no puede escribirlo al mismo tiempo, no puede escribir al mismo tiempo y no puede leerlo al escribir.
Lea el bloqueo cuando lea, lea el desbloqueo;
Presta atención a finalmente desbloquear.
paquete com.ljq.test.thread; Public static void main (string [] args) {final readwrite rw = new ReadWrite (); {rw.read ();}} .start (); ();}}} /** * Leer y escribir mutuamente excluyendo, así que colóquelos en la misma clase * * @authouse administrador * * /class readwrite {private object data = null; Los datos, pero hay múltiples hilos para leer los datos al mismo tiempo. ReadwriteLock rwl = New ReentRantReadWriteLock (); .sleep ((Long) (Math.random () * 1000)); {E.PrintStackTrace ();} Finalmente {rwl.readlock (). (); .println (Thread.CurrentThread ().
Diseñe un sistema de caché del sistema de caché: si necesita tomar los datos, debe llamar al método de getData de objetos públicos (clave de cadena). , alguien vendrá a estos datos la próxima vez, y devolveré este número directamente sin encontrarlo en la base de datos. No encuentre la base de datos para datos, venga a mí.
paquete com.ljq.test.thread; System * * * @Author Administrator * */public class Cachedemo {private map <string, object> cache = new HashMap <String, Object> (); ; Cachedemo Cachedemo = new Cachedemo (); Desde Caching} ReadWriteLock RWL = New ReEntRantReadWriteLock (); / Primero verifique si hay un valor en la memoria interna if (value == null) {// si no, verifique la base de datos para ir a la base de datos y guardar los resultados encontrados en la memoria interna // liberar el bloqueo de lectura , escriba bloqueo rwl.readlock (). out.println ("Leer datos de la base de datos"); Desbloquear ();} // rw para restaurar el estado de lectura y escritura rwl.readlock (). valor;}}
Resultados de retroceso: