类ReentrantLock具有完全互斥的效果,即同一时间只有一个线程在执行ReentrantLock()方法后面的任务。这样做虽然保证了实例变量的线程安全性,但效率低下。通过ReentrantReadWriteLock类可以在某些不需要操作实例变量的方法中,完全可以使用读写锁(ReentrantReadWriteLock)来提升效率。
读写锁表示有两个锁,一个是读操作的锁,也称共享锁;一个是写操作的锁,也叫排它锁。也就是多个读锁之间不互斥,读锁与写锁互斥,写锁与写锁互斥。
读读共享
从控制台中打印的时间来看,两个线程几乎同时进入lock()方法后面的代码。说明在此使用了lock.readLock()读锁可以提高程序运行效率,允许多个线程同时执行lock()方法后面的代码。
写写互斥
使用写锁writeLock()的效果就是同一时间只允许一个线程执行lock()方法后面的代码
读写互斥
只要出现写锁,就是互斥的。
“读写”,”写读”和”写写”都是互斥的;而”读读”是异步的,非互斥的。