ReentrantReadWriteLock是java读写锁的实现。
读写锁的作用,当发现程序大部分时间是进行读操作,而只有个别时间需要进行写操作。
这时候使用读写锁在保证多线程安全基础上,对性能是有帮助提升的。
读锁可以重入,多线程不发生互斥,可以同时进行读取操作。
写锁,能保证当前只有一个线程获取到写锁,此时读锁和写锁的获取的线程都会被阻塞,(同样能够获得写锁也意味着当前没有读锁和写锁被其他线程获取到。)
而如果在这种场景下使用普通锁,即正常的读写互斥,那么这会导致,大多数的读场景,均是线程间串行执行代码,这样可想而之,性能会下降。
一般使用方式:
ReadWriteLock lock = new ReentrantReadWriteLock();
lock.readLock().lock();
try {
} finally {
lock.readLock().unlock();
}
注:如果本身的临界区的耗时极短(如微妙),那么将synchronized更改为读写锁,其实不会太多的性能帮助,因此1ms内能顺序处理足够多的线程了,不会成为瓶颈