synchronized和reentrantlock之间的区别

相同点:

  1. synchronized 和 ReentrantLock 都是 Java 中提供的可重入锁

不同点:

  1. 用法不同:synchronized 可以用来修饰普通方法、静态方法和代码块;ReentrantLock 只能用于代码块;

  1. synchronized退出代码块就自动释放锁,reentrantlock必须手动加锁,手动释放锁,注意要用try-finally处理加锁和释放锁的代码

  1. synchronized只支持非公平锁,reentrantlock支公平锁,也支持非公平锁,通过构造方法的参数指定

  1. ReentrantLock可以根据不同的条件进行唤醒和休眠

  1. synchronized在申请锁失败时,会一直等待锁资源,ReentrantLock可以通过trylock()等待一段时间就放弃

  1. synchronized是JVM对锁的实现,最终通过调用cpu的加锁指令,ReentrantLock是java层面的JUC包中的一组实现类(底层实现不同:synchronized 是 JVM 层面通过监视器实现的;ReentrantLock 是基于 AQS 实现的。)

猜你喜欢

转载自blog.csdn.net/m0_65431718/article/details/128944200