首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ReentrantReadWriteLock请求

Java ReentrantReadWriteLock请求
EN

Stack Overflow用户
提问于 2009-07-07 09:51:26
回答 2查看 609关注 0票数 0

关于Java语言中的ReadWriteLocks (特别是ReentrantReadWriteLock实现),我只想提一个简短的问题,因为我觉得sun文档并不清楚。

如果一个线程持有一个读锁,而另一个线程请求一个写锁,会发生什么?写锁线程是否必须等待当前持有的所有读锁被释放?另外,是否所有新的读锁请求都会被阻塞,直到写锁被授予并释放?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-07 10:10:39

Javadoc解释了这一点:

此类不会对锁访问强制使用读取器或写入器首选顺序。但是,它确实支持可选的公平策略。当被构造为公平时,线程使用近似到达顺序策略竞争进入。当写锁定被释放时,等待时间最长的单个写入器将被分配写锁定,或者如果存在比任何写入器等待时间更长的读取器,则该组读取器将被分配读锁定。当构造为非公平时,进入锁的顺序不需要按到达顺序。在任一情况下,如果读取器是活动的,并且写入器进入锁,则直到该写入器获得并释放写锁定之后,后续读取器将不会被授予读锁定。

如果一个线程持有一个读锁,而另一个线程请求一个写锁,会发生什么?写锁线程是否必须等待当前持有的所有读锁被释放?

是的,作者将不得不等待。但它将只等待当前持有的读锁定。任何较晚到达的读者都将排在作者之后。

另外,是否所有新的读锁请求都会被阻塞,直到写锁被授予并释放?

票数 3
EN

Stack Overflow用户

发布于 2009-07-07 09:59:15

ReadWriteLock不能将写锁定与读锁定同时持有。例如,当持有读锁定时对写锁定的请求将导致阻塞或失败。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1091388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档