相同点:
都是可重入锁,都是同一个线程没进入一次,锁的计数器自增1,等到锁的计数器为0时释放锁。
不同点:
1、Synchronized依赖jvm实现,实现方式比较难见到,ReetTrantLock依赖JDK实现,有源码可看。
2、Synchronized使用简单便捷,加锁,解锁由编译器实现;ReenTrantLock需要手动声明、加锁、解锁,功能更细粒度和灵活。
3、ReenTrantLock可以指定是公平锁还是非公平锁,Synchronized只能是非公平锁。
4、ReenTrantLock提供了一个条件类,可以分组唤醒需要唤醒的线程,Synchronized只能随机唤醒或者唤醒全部。
5、ReenTrantLock提供了可中断等待锁的线程的机制,通过lock.lockInterruptibly()来实现这个机制。
文章整理自:https://blog.youkuaiyun.com/z69183787/article/details/79344382