synchronized与ReentrantLock区别

synchronized与ReentrantLock都是可重入锁,区别两者之前,先介绍可重入锁的概念。

可重入锁

同一个线程可以在对象锁还没释放时,可再次获取这个对象的锁。同一个线程每次获取锁,锁的计数器加1,释放一次锁,计数器减1,直到计数器为0,完全释放锁。

synchronized与ReentrantLock区别

  • ReentrantLock是一个类,使用灵活,必须配合释放锁
  • ReentrantLock手动获取或释放锁
  • ReentrantLock只适用代码块锁,synchronized不仅适合代码块,也适用类、变量
  • 锁机制不一样。ReentrantLock调用Unsafe的park加锁,synchronized使用对象mark word

顺便提一下synchronized作用不同,它对应锁的是什么?

  • 普通方法:锁当前实例
  • 静态方法:锁当前类的class对象
  • 方法块:锁括号里的对象

猜你喜欢

转载自www.cnblogs.com/ivy-xu/p/12586140.html