关于Java语言中的ReadWriteLocks (特别是ReentrantReadWriteLock实现),我只想提一个简短的问题,因为我觉得sun文档并不清楚。
如果一个线程持有一个读锁,而另一个线程请求一个写锁,会发生什么?写锁线程是否必须等待当前持有的所有读锁被释放?另外,是否所有新的读锁请求都会被阻塞,直到写锁被授予并释放?
谢谢
发布于 2009-07-07 10:10:39
Javadoc解释了这一点:
此类不会对锁访问强制使用读取器或写入器首选顺序。但是,它确实支持可选的公平策略。当被构造为公平时,线程使用近似到达顺序策略竞争进入。当写锁定被释放时,等待时间最长的单个写入器将被分配写锁定,或者如果存在比任何写入器等待时间更长的读取器,则该组读取器将被分配读锁定。当构造为非公平时,进入锁的顺序不需要按到达顺序。在任一情况下,如果读取器是活动的,并且写入器进入锁,则直到该写入器获得并释放写锁定之后,后续读取器将不会被授予读锁定。
如果一个线程持有一个读锁,而另一个线程请求一个写锁,会发生什么?写锁线程是否必须等待当前持有的所有读锁被释放?
是的,作者将不得不等待。但它将只等待当前持有的读锁定。任何较晚到达的读者都将排在作者之后。
另外,是否所有新的读锁请求都会被阻塞,直到写锁被授予并释放?
是
发布于 2009-07-07 09:59:15
ReadWriteLock不能将写锁定与读锁定同时持有。例如,当持有读锁定时对写锁定的请求将导致阻塞或失败。
https://stackoverflow.com/questions/1091388
复制相似问题