天道酬勤,学无止境

同步类

同步类的基础AbstractQueuedSynchronizer(AQS)

同步类的基础AbstractQueuedSynchronizer(AQS)我们之前介绍了很多同步类,比如ReentrantLock,Semaphore, CountDownLatch, ReentrantReadWriteLock,FutureTask等。AQS封装了实现同步器时设计的大量细节问题。他提供了FIFO的wait queues并且提供了一个int型的state表示当前的状态。根据JDK的说明,并不推荐我们直接使用AQS,我们通常需要构建一个内部类来继承AQS并按照需要重写下面几个方法:tryAcquiretryReleasetryAcquireSharedtryReleaseSharedisHeldExclusively在这些方法中,我们需要调用getState, setState 或者 compareAndSetState这三种方法来改变state值。上面的方法提到了两种操作,独占操作(如:ReentrantLock)和共享操作(如:Semaphore,CountdownLatch)。两种的区别在于同一时刻能否有多个线程同时获取到同步状态。比如我们运行同时多个线程去读,但是通知只允许一个线程去写,那么这里的读锁就是共享操作,而写锁就是独占操作。在基于QAS构建的同步类中,最基本的操作就是获取操作和释放操作。而这个state就表示的是这些获取和释放操作所依赖的值

2021-05-13 12:24:54    分类:博客    同步类   AbstractQueuedSynch