《JAVA并发编程》这本书说:如无必要,尽量不要用ReentrantLock. 用synchronized关键字就可以了。 因为使用ReentrantLock时必须要记得在finally块里使用unlock(),一旦忘了(发生这种事的概率不低),可能造成很大的悲剧。
ReentrantLock和synchronized的语义是一样的,在JAVA 5里前者性能比后者好很多,但在JAVA 6里两者已经没什么区别了,所以用synchronized不会有性能问题。
ReentrantLock的唯一优势在于它提供了无阻塞加锁、可中断加锁等特性,这对避免死锁有很大帮助。如果你确实需要这些特性,才使用ReentrantLock.