synchronized:
1、依赖于JVM的底层实现;
2、获取到锁后,再执行完任务或者出现异常时会自动释放锁;
3、是非公平锁,也就是说一个线程可能会多次得到该锁;
4、是重量级锁,是悲观锁,类似于数据库直接加for update进行锁住。
ReentrantLock:
1、是Java的一个类,需要手动编码;
2、获取到锁后,需要手动释放,一般是在finally代码块中进行锁的释放;
3、可以根据需要,设定为公平锁或者非公平锁;
4、是轻量级锁,是乐观锁,类似于数据库version版本号字段。
synchronized和reetrantLock都是可重入锁,也就是说获得到锁后,当前线程还可以再次获得该锁;

本文详细对比了synchronized和ReentrantLock两种锁机制的特点。synchronized依赖于JVM,自动释放锁,是非公平、重量级的悲观锁;而ReentrantLock需手动释放,可设定公平性,是轻量级的乐观锁。两者都是可重入锁。
1205

被折叠的 条评论
为什么被折叠?



