Java中synchronized和ReentrantLock有什么区别?
相同点
synchronized和ReentrantLock都是加锁方式同步,而且都是阻塞式的同步。
不同点
- synchronized竞争锁时会一直等待;ReentrantLock可以尝试获取锁,并得到获取结果。
- synchronized无法设置获取锁的超时时间;ReentrantLock可以设置获取锁的超时时间
- synchronized无法实现公平锁;ReentrantLock可以满足公平锁,公平锁即先等待先获取到锁
- synchronized控制等待和唤醒需要结合加锁对象的wait()、notify()和notifyAll()方法;ReentrantLock控制等待和唤醒需要结合Condition的await()、signal()和signalAll()方法
- synchronized是JVM层面实现的;ReentrantLock是JDK代码层面实现的
- synchronized在加锁代码块执行完或者出现异常时,会自动释放锁;ReentrantLock不会自动释放锁,需要在finally代码块释放

浙公网安备 33010602011771号