Java Concurrency(三)——J.U.C AQS源码解读
java5之后的java.util.concurrent包是世界级并发大师Doug Lea的作品,里面主要实现了 atomic包里Integer/Long对应的原子类,主要基于 CAS ; 一些同步子,包括Lock,CountDownLatch,Semaphore,FutureTask等,这些都是基于AbstractQueuedSynchronizer类; 关于线程执行的Executors类等; 一些并发的集合类,比如ConcurrentHashMap,ConcurrentLinkedQueue,CopyOnWriteArrayList等。 今天我们主要介绍AbstractQueuedSynchronizer这个可以说是最核心的类,没有之一。整个concurrent包里,基本都直接或间接地用到了这个类。Doug Lea的这篇 论文 里面讲AQS的实现。 #AQS 首先,我们来想象一下,一间屋里有一个大家都想要得到的会让你很爽的东西(something which makes you so happy, e.g. W.C)。当有人进去把门关起来在独占享用的时候,其他人就只能在外面排队等待,既然在等待,你就不能老是去敲门说哎,好了没有啊。老是这样的话里面的人就很不爽了,而且你可以利用这点等待时间干点别的,比如看看小说视频背背单词或者就干脆椅子上睡觉,当前面独占的人爽完之后,就会出来说