ReentrantLock

与synchronized具有相同的功能和语义(都是互斥锁),但是它具有更好的扩展性。
通过
默认构造器是非公平锁,但可以构造公平锁。

非公平lock方法

尝试获取锁,获取失败的话就调用AQS的acquire(1)方法

公平lock方法

公平的lock方法其实就多了一个状态条件hasQueuedPredecessors这个方法主要是判断当前线程是否位于CLH同步队列中的第一个。如果是则返回flase,否则返回true

ReentrantReadWriteLock

synchronized内置锁和ReentrantLock都是互斥锁(一次只能有一个线程进入到临界区(被锁定的区域))
而ReentrantReadWriteLock是一个读写锁

  • 取数据的时候,可以多个线程同时进入到到临界区(被锁定的区域)
  • 数据的时候,无论是读线程还是写线程都是互斥

即:在读的时候可以共享,在写的时候是互斥的