java并发编程之AQS讲解(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41751625/article/details/89486189

       提到java的并发编程,我们就绕不过老生长谈的CAS和AQS,这一篇我们主要讲解AQS,AQS(AbstractQueueSynchronized),这个类中提供了一个FIFO队列,这个类是为很多其他的并发工具类提供了最基本的支持。通过维护一个volatile int state的常量的同步操作来判断是否获得锁。

       这个类中主要提供了独占和共享两种锁,分别对应tryAcquire(int),tryRelease(int)和tryAcquireShare(int),tryReleaseShare(int)这两组方法,在AQS中,都只是抛出一个异常,需要子类去实现。

protected boolean tryAcquire(int arg) {
    throw new UnsupportedOperationException();
}
protected boolean tryRelease(int arg) {
    throw new UnsupportedOperationException();
}
protected int tryAcquireShared(int arg) {
    throw new UnsupportedOperationException();
}
protected boolean tryReleaseShared(int arg) {
    throw new UnsupportedOperationException();
}

 例如ReentrantLock中独占锁,就会实现tryAcquire和tryRelease方法。

而 Semaphore共享锁,就会实现tryAcquireShare和tryReleaseShare方法.

通常都是通过静态内部类的形式来继承AQS,从而达到安全保护的作用。

猜你喜欢

转载自blog.csdn.net/weixin_41751625/article/details/89486189