通过AQS实现自己的锁
创建MyLock类
所以在MyLock类中创建私有内部sync类,继承AbstractQueuedSynchronizer
对于加锁和释放锁,我们通过使用内部类Helper来完成
在helper子类中创建一个方法返回Condition
release(1)中的1和之前的1,指的加锁1次
重写tryAcquire()方法
重写tryRelease()方法
创建Main类,加上自定义锁
记得初始化
运行:
增加重入锁
在Main类中增加两个方法
运行
公平锁
公平是针对锁的获取而言的,如果一个锁是公平的,那么锁的获取顺序就应该符合请求的绝对时间顺序。
coding:
创建FairLock类
通过一个list集合来保存等待线程
该对象里面主要实现的是设置等待状态和唤醒等待状态的功能
unlock之后叫醒第一个(这样就实现了先进先出)
ReentrantLock底层的公平与非公平锁
公平和非公平锁的tryAcquire方法