采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
我看《Java并发编程实战》,里面介绍ReentrantReadWriteLock,读锁和写锁,里面说读锁类似于Semaphore而不是锁,只是维护当前活跃的读线程的数量,我知道读锁是共享锁而写锁是排它锁,那我的理解是共享锁不是一种真正的锁,那他又有什么意义呢?
你好,他存在的意义可以参考ReentrantLock,ReentrantLock 实现了标准的互斥操作,也就是一次只能有一个线程持有锁,显然这个特点在一定程度上面减低了吞吐量。
实际应用场景中我们会经常遇到这样的情况:某些资源需要并发访问,并且大部分时间是用来进行读操作的,写操作比较少,而锁是有一定的开销的,当并发比较大的时候,锁的开销就非常可观了。所以如果可能的话就尽量少用锁,如果非要用锁的话就尝试看能否能实现读写分离,将其改造为读写锁。
ReentrantReadWriteLock主要就是为了解决这种场景,尽可能的减少排他锁的使用,同时也能保证足够的线程安全。
既然读操作很多,加排他锁的开销又大,那我直接对读操作不加任何锁不是更好吗,为啥还需要读锁
还记得课程开始部分讲线程安全时的例子不,不加锁时其他线程做了修改后,你当前的线程可能读取不到最新值,导致操作出现线程安全问题
非常感谢!
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.2k 15
3.6k 12
1.3k 12