synchronized是非公平锁,ReentrantLock可以是公平锁,也可以是非公平锁。
(通过构造器的传入参数选择是否是公平锁)
synchronized是代码块运行结束自己解锁,而ReentrantLock是需要手动解锁。
(解锁操作写到finally代码块中)
synchronized获取不到锁只能死等,ReentrantLock的trylock()方法可以在一段时间获取不到锁就放弃争夺锁。
synchronized是jvm层面的,最后调用cpu指令来完成加锁,ReentrantLock是juc包的一个实现类。
ReentrantLock可以自定义唤醒条件。
(搭配使用Condition类)