synchronized和reentrantlock区别?
synchronized 和ReentrantLock都是Java 中提供的可重入锁:
1、 用法不同:synchronized 可用来修饰普通方法、静态方法和代码块,而ReentrantLock只能用在代码块上。
2、 获取锁和释放锁方式不同:synchronized会自动加锁和释放锁,当进入synchronized修饰的代码块之后会自动加锁,当离开synchronized的代码段之后会自动释放锁。而ReentrantLock 需要手动加锁和释放锁。
3、锁类型不同:synchronized 属于非公平锁,而ReentrantLock既可以是公平锁也可以是非公平锁。
4、响应中断不同:ReentrantLock可以响应中断,解决死锁的问题,而synchronized 不能响应中断。
5、 底层实现不同:synchronized是JVM层面通过监视器实现的,而ReentrantLock是基于AQS实现的。