java并发中读写锁实现的一个细节疑问。

面试题java并发中读写锁实现的一个细节疑问。
1
Kevin_Jia 管理员 asked 3年 ago

当一个线程先获取到读锁的时候,有另外的线程需要获取写锁,显然这个线程不能获取写锁,等待读状态为0才能获取到,那么如果同时有其他线程在永远不停的获取读锁,这个读状态永远都不为0,那么写线程是否会饿死呢?为了防止这种写锁可能会永远等待,饿死的情况出现是如何避免的?

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: java并发中读写锁实现的一个细节疑问。


FavoriteLoading添加本文到我的收藏
4 Answers
0
休息的风 管理员 answered 1年 ago

其实只要设置为公平锁就能避免写锁饿死了

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Answer for java并发中读写锁实现的一个细节疑问。


FavoriteLoading添加本文到我的收藏
hongweig 管理员 replied 1年 ago

可否详细的解释一下为何设置为公平锁就可以避免写锁饿死了呢?
我的理解是,如果读锁在获取了锁之后,写锁就会被放入等待队列,您的意思是写锁和读锁同在一个等待队列吗?还是说读锁在获取锁的时候,先查看是否有写锁呢?

0
v5code 管理员 answered 1年 ago

为什么不使用读、写队列 或者读前检查写 设置优先级

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Answer for java并发中读写锁实现的一个细节疑问。


FavoriteLoading添加本文到我的收藏
0
MageekChiu 管理员 answered 10月 ago

确实会饿死,所以jdk8引入了StampedLock

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Answer for java并发中读写锁实现的一个细节疑问。


FavoriteLoading添加本文到我的收藏
0
Shuanghun 管理员 answered 8月 ago

ReentrantReadWriteLock 在沒有任何读锁时,才可以取得写入锁,这可用于实现了悲观读取。然而,如果读取很多,写入很少的情况下,使用 ReentrantReadWriteLock 可能会使写入线程遭遇饥饿问题,也就是写入线程无法竞争到锁定而一直处于等待状态。

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Answer for java并发中读写锁实现的一个细节疑问。


FavoriteLoading添加本文到我的收藏

return top