Synchronized 和 ReentrantLock 的异同
时间: 2023-06-09 20:02:22 浏览: 99
Synchronize和ReentrantLock区别.png
Synchronized 和 ReentrantLock 都是实现线程安全的方式,可以保证多个线程在访问共享资源时不会发生冲突。它们的异同如下:
1. 锁的获取方式不同:Synchronized 是隐式锁,由 JVM 自动管理,而 ReentrantLock 是显示锁,需要手动初始化、获取和释放。
2. 可中断性不同:当线程持有 ReentrantLock 时,如果其他线程也需要获取这个锁,但是超时时间到达,那么当前线程会被中断,而 Synchronized 则无法中断。
3. 同步代码块的粒度不同:Synchronized 的同步代码块必须要有一个对象作为锁,而 ReentrantLock 可以根据需要指定锁的粒度。
4. 可以实现公平锁:ReentrantLock 可以设置公平锁,按照线程请求锁的时间顺序获取锁,而 Synchronized 不可以。
5. 性能不同:在高并发情况下,ReentrantLock 的性能通常优于 Synchronized。但是,在低并发情况下,Synchronized 更适合,因为它不会产生额外的开销。
阅读全文