Synchronizer解析(为AQS打个铺垫)

  ReentranceLock 和 Semaphore有很多共同点,他们都像是一个gate一样, 来控制让哪些线程阻塞,让哪些线程通过. 不同的是,ReentranceLock允许通过的量是1,Semaphore允许多个线程通过, 所以在这个角度看,ReentranceLock和Semaphore是可以相互实现的. 另外他们还提供了公平或非公平的竞争,超时等等特性

他们都是由AQS作为基类来实现的.AQS  is  a  framework  for  building  locks  and  synchronizers,  and  a  surprisingly  broad  range  of
synchronizers can be built easily and efficiently using it. Not only are  ReentrantLock  and  Semaphore  built using AQS,
but so are  CountDownLatch ,  ReentrantReadWriteLock ,  SynchronousQueue , [12]  and  FutureTask .

使用AQS而不是其他的锁或同步器来实现新的锁, 因为AQS提供了很多好处: 1.省去了很多精力 2.我们在使用别的同步器的来实现新的同步器的时候,很可能为了获取一次锁而实际产生多次获取锁的操作,而造成了额外的线程切换. 比如,我们在锁的内部使用了wait,这种情况下,为了一次获取锁,实际进行了俩次锁的获取操作.而如果使用AQS的话,只会有一次获取锁的操作, AQS就是为了更好的扩展性才设计的

原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/7652929.html