1

Is there a limit to the ReentrantReadWriteLock? I'm now testing my application and it seems my write lock isn't giving out locks anymore (returning true: tryLock()) when I'm at 20 threads.

4

2 回答 2

2

限制是 65535 个锁,因此您似乎不太可能使用 20 个线程来达到它。(虽然可能,但该限制确实计算了重入获取。但是,违反它会导致抛出错误,而不是来自 的错误返回值tryLock()。)

更有可能的是,您正处于系统足够繁忙的地步,以至于在您尝试时不太可能有锁可用tryLock()。您可能应该切换到以合理超时阻塞的调用,以便线程等待其他线程完成并且锁定可用。

于 2014-04-24T21:10:01.133 回答
0

(返回 true:tryLock())当我有 20 个线程时。

除非您有 20 个 CPU,否则这些线程不会同时运行,并且正在运行的线程很可能会排除未运行的线程。如果您需要避免这种情况,则必须使用公平锁。

一个更好的解决方案是不要编写任何对任何锁都存在重大争用的代码。

于 2014-04-24T21:07:41.623 回答