ReentrantReadWriteLock是否有限制?我现在正在测试我的应用程序,当我处于20个线程时,似乎我的写锁定不再发出锁定(返回true:tryLock()
)。
答案 0 :(得分:2)
限制是65535个锁,所以你似乎不太可能用20个线程命中它。 (虽然可能,但限制确实计算了重入获取。但是,违反它会导致抛出错误,而不是来自tryLock()
的错误返回值。)
更有可能的是,您正处于系统繁忙的程度,以至于当您尝试tryLock()
时,锁定不可能在该确切的瞬间可用。您可能应该切换到以合理超时阻塞的调用,以便线程等待其他人完成并且锁定变为可用。
答案 1 :(得分:0)
(返回true:tryLock())当我在20个线程时。
除非你有20个CPU,否则这些线程不是同时运行的,并且正在运行的线程可能会丢弃不是的线程。如果你需要避免这种情况,你必须使用公平的锁定。
更好的解决方案是不要将代码写入任何锁定的重要争用。