A simple example of Java-ReentrantReadWriteLock
Content: shared during lock reading and mutex (visible running results) During lock writing are implemented through AQS.
Public class ReentrantReadWriteLockTest {static class MyObject {private Object object Object; private ReadWriteLock lock = new ReentrantReadWriteLock (); public void get () {lock. readLock (). lock (); System. out. println (Thread. currentThread (). getName () + prepare to read data !!); Try {Thread. sleep (new Random (). nextInt (1000); System. out. println (Thread. currentThread (). getName () + read data: + this. object);} catch (InterruptedException e) {e. printStackTrace ();} finally {lock. readLock (). unlock () ;}} public void put (Object object) {lock. writeLock (). lock (); System. out. println (Thread. currentThread (). getName () + prepare to write data); try {Thread. sleep (new Random (). nextInt (1000); this. object = object; System. out. println (Thread. currentThread (). getName () + write data as + this. object);} catch (InterruptedException e) {e. printStackTrace ();} finally {lock. writeLock (). unlock () ;}} public static void main (String [] args) throws InterruptedException {final MyObject myObject = new MyObject (); ExecutorService executor = Executors. newCachedThreadPool (); for (int I = 0; I <3; I ++) executor.exe cute (new Runnable () {@ Overridepublic void run () {for (int j = 0; j <5; j ++) myObject. put (new Random (). nextInt (1000) ;}}) ;}for (int I = 0; I <3; I ++) executor.exe cute (new Runnable () {@ Overridepublic void run () {for (int j = 0; j <5; j ++) myObject. get () ;}}) ;}executor. shutdown ();}}
Running result: