synchronized 和ReentrantLock区别?
synchronized 和 ReentrantLock 都可以用于多线程下的同步控制,但具有如下不同点:
- 线程阻塞机制不同:synchronized 在获取锁失败时会一直等待,而 ReentrantLock 支持可中断式获取锁。
- 对于公平锁的支持:synchronized 无法实现公平锁,而 ReentrantLock 可以通过构造函数传入 true 来实现公平锁。
- 性能方面不同:在低并发的情况下,synchronized 的性能比 ReentrantLock 好,因为它是 JVM 层面的锁,不需要进行用户态和内核态之间的切换。但在高并发的情况下,ReentrantLock 的性能优于 synchronized,因为它提供了更灵活的线程控制,可以有效地避免死锁。