synchronized和ReentrantLock的区别
共同点:
1. 都是来处理多线程访问对象、变量的问题。
2. 都是课重入锁,同一线程可以多次获得同一个锁
3. 保证了可见性和互斥性
不同点
1. R是显式的获得、释放;syn是jvm负责,隐式获得释放。
2. R可以响应中断,可以轮回;syn不可以响应中断
3. R是API级别的,syn是JVM级别
4. R可以实现公平锁
5. R可以通过Condition绑定多个条件
6. 底层实现不一样,syn使用同步阻塞,悲观并发策略;lock是非同步阻塞,采用乐观并发策略。
7. syn发生异常会自动释放线程占用的锁,不会发生死锁;R需要在finally中释放锁,不然会导致死锁。
8. Lock可以让等待锁的线程响应中断,syn不行,syn使用时,等待线程会一直等待下去,不能响应中断。
9. Lock可以知道有没有成功获取锁,syn无法办到。
10. Lock可以提高多个线程进行读操作的效率,读写锁。