ReentrantLock
与synchronized具有相同的功能和语义(都是互斥锁),但是它具有更好的扩展性。
通过
默认构造器是非公平锁,但可以构造公平锁。
非公平lock方法
尝试获取锁,获取失败的话就调用AQS的acquire(1)方法
公平lock方法
公平的lock方法其实就多了一个状态条件hasQueuedPredecessors,这个方法主要是判断当前线程是否位于CLH同步队列中的第一个。如果是则返回flase,否则返回true。
ReentrantReadWriteLock
synchronized内置锁和ReentrantLock都是互斥锁(一次只能有一个线程进入到临界区(被锁定的区域))
而ReentrantReadWriteLock是一个读写锁:
- 在读取数据的时候,可以多个线程同时进入到到临界区(被锁定的区域)
- 在写数据的时候,无论是读线程还是写线程都是互斥的
即:在读的时候可以共享,在写的时候是互斥的
