简而言之,我的问题是,在java中使用Lock和Condition代替synchronized关键字有什么好处,Lock似乎更容易出错。
答案 0 :(得分:0)
锁定与同步
1. Lock为锁定提供了更多的可见性和选项,与线程可能最终无限期地等待锁定的同步不同,我们可以使用tryLock()来确保线程仅等待特定时间。
2.同步代码更清晰,更易于维护,而使用Lock,我们不得不尝试使用try-finally块来确保即使在lock()和unlock()方法调用之间抛出异常,也会释放Lock。
3.同步块或方法只能覆盖一种方法,而我们可以在一种方法中获取锁,并使用Lock API在另一种方法中释放它。
4. synchronized关键字不提供公平性,而我们可以在创建ReentrantLock对象时将公平性设置为true,以便最长等待的线程首先获得锁定。
5.我们可以为Lock创建不同的条件,不同的线程可以针对不同的条件等待()
来自here。对我来说,使用Lock的最重要原因是3和4。