前言:synchronized和ReentrantLock的区别:
1. 要注意synchronized同步,假如发生异常,JVM是可以帮我们自动释放锁的;但是lock不可以,我们只能手动释放锁,即使发生异常,jvm也不会自动释放锁。
2. synchronized与wait()和notify()/notifyAll()方法结合可以实现等待通知模式;Reentrantlock可以实现同样的功能,在synchronized当中,被通知的线程是由JVM随机选择,但是lock结合condition可以实现选择性通知。
3. 不要在Lock和Condition上使用wait、notiffy、notifyAll方法,改为使用:await、signal、signalAll。
4. Synchronized是Lock的一种简化实现,一个Lock可以对应多个 Condition,而synchronized把Lock和Condition合并了,一个 synchronized Lock只对应一个Condition,可以说Synchronized是Lock 的简化版本。 在JDK 5,Synchronized要比Lock慢很多,但是在JDK 6中,它们的效 率差不多。
ReentrantLock + lock + condition 使用举例:
备注:注意在condition.await()方法调用之前,必须先lock.lock()获得锁。
import java.util.concurrent.locks.Condition;