synchronized 和 ReentrantLock 区别是什么
时间: 2023-05-28 21:07:10 浏览: 90
第15讲synchronized和ReentrantL1
synchronized 和 ReentrantLock 都是用于实现线程同步的机制。它们的主要区别如下:
1. 可重入性:ReentrantLock 是可重入锁,同一个线程可以多次获取该锁,而 synchronized 是不可重入锁,同一个线程在获取该锁之前必须先释放该锁。
2. 性能:在竞争不激烈的情况下,synchronized 的性能优于 ReentrantLock,因为 synchronized 是 JVM 内置的关键字,而 ReentrantLock 是基于 Java API 实现的。
3. 可中断性:ReentrantLock 拥有可中断锁的特性,可以在等待锁的过程中中断等待的线程,而 synchronized 不具备这个特性。
4. 公平性:ReentrantLock 可以设置公平锁和非公平锁,而 synchronized 只能是非公平锁。
5. 灵活性:ReentrantLock 提供了更多的方法,例如可以通过 tryLock() 方法尝试获取锁而不阻塞,可以通过 lockInterruptibly() 方法在等待锁的过程中响应中断,而 synchronized 只提供了基本的 wait()、notify()、notifyAll() 方法。
阅读全文