请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师你好,关于ReentrantReadWriteLock的问题

我看《Java并发编程实战》,里面介绍ReentrantReadWriteLock,读锁和写锁,里面说读锁类似于Semaphore而不是锁,只是维护当前活跃的读线程的数量,我知道读锁是共享锁而写锁是排它锁,那我的理解是共享锁不是一种真正的锁,那他又有什么意义呢?

正在回答

1回答

你好,他存在的意义可以参考ReentrantLock,ReentrantLock 实现了标准的互斥操作,也就是一次只能有一个线程持有锁,显然这个特点在一定程度上面减低了吞吐量。

实际应用场景中我们会经常遇到这样的情况:某些资源需要并发访问,并且大部分时间是用来进行读操作的,写操作比较少,而锁是有一定的开销的,当并发比较大的时候,锁的开销就非常可观了。所以如果可能的话就尽量少用锁,如果非要用锁的话就尝试看能否能实现读写分离,将其改造为读写锁。

ReentrantReadWriteLock主要就是为了解决这种场景,尽可能的减少排他锁的使用,同时也能保证足够的线程安全。

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_湿腻焦糊_0 #1
    既然读操作很多,加排他锁的开销又大,那我直接对读操作不加任何锁不是更好吗,为啥还需要读锁
    回复 有任何疑惑可以回复我~ 2018-08-27 23:27:02
  • Jimin 回复 提问者 qq_湿腻焦糊_0 #2
    还记得课程开始部分讲线程安全时的例子不,不加锁时其他线程做了修改后,你当前的线程可能读取不到最新值,导致操作出现线程安全问题
    回复 有任何疑惑可以回复我~ 2018-08-27 23:31:14
  • 提问者 qq_湿腻焦糊_0 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-08-28 00:58:17
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信