Java/synchronized 和 ReentrantLock
在 Java5 之前,只有synchronized
一种锁,在 Java5 之后,增加了ReentrantLock
。ReentrantLock
位于 java.util.concurrent.locks 包,和 CountDownLatch、FutureTask、Semaphore 一样基于 AQS 实现,能够实现比synchronized
更细粒度的控制,如控制公平性(fairness)。使用ReentrantLock
需要注意的是在调用 lock() 方法之后,必须调用 unlock() 释放锁。在 Java6 后经过优化的synchronized
性能未必比ReentrantLock
低,并且synchronized
也是可重入的。