Synchronized和ReentrantLock

  Synchronized与ReentrantLock是两种同步锁,两者有相同点也存在区别。

Synchronized

  Synchronized是实现线程同步的基本手段,底层通过锁机制来实现,对于被synchronized修饰的区域每次只有一个线程可以访问,从而满足线程安全的目的。
  Synchronized是悲观锁,悲观地认为程序中的并发情况严重,所以严防死守。这种线程一旦得到锁,其他需要锁的线程就挂起的情况就是悲观锁。(认为别人会修改数据)。
  可修饰方法,又可修饰对象,代码块。

  • 优点:不消耗CPU。
  • 缺点:响应时间缓慢,不够灵活。

ReentrantLock

  ReentrantLock 内部是基于 AbstractQueuedSynchronizer(抽象队列化同步器,AQS)实现的。使用了CAS方法。

  • 优点:竞争的线程不会阻塞,提高了程序的响应速度。
  • 缺点:自旋CPU开销大。破坏代码原子性。
    AQS
    CAS