ReentrantReadWriteLock(读写锁)

  读写锁ReentrrantWriteLock, 其核心就是实现读写分离的锁,在高并发访问下,尤其是读多写少的情况下,性能要远高于重入锁。

  之前学synchronized、ReentrantLock时,我们知道,同一时间内,只能有一个线程进行访问被锁定的代码,那么读写锁则不同,其本质是分成两个锁,即读锁、写锁。在读锁下,多个线程可以并发地进行访问,但是在写锁的时候,只能一个一个的顺序访问。

口诀:读读共享,写写互斥。读写互斥。

下面看一个demo,看一下读写锁的实现,顺便看一下读读共享,写写互斥。读写互斥的实例:

 

先看一下读读共享,把下面的内容注释掉:

运行看一下结果:

 

会发现,这两个线程是同时进入的,这就是读读共享;

写写互斥:

看一下结果:

可以看出,在t3线程进入时,锁被t3线程获得了,此时,t4线程只能等待t3线程释放锁,然后才能继续执行。

读写互斥跟上面的类似:

结果:

 

锁优化的总结:

1、避免死锁

2、减小锁的持有时间

3、减小锁的粒度

4、锁的分离

5、尽量使用无锁的操作,如原子操作(Atomic系列类),volatile关键字

posted on 2017-03-03 14:29  小~虎  阅读(411)  评论(0编辑  收藏  举报