lock 相关
lock基本思路: volitile + CAS +Queue(存放线程) 实现了: 1 可见性(volitile 和 happenedBefor原则共同实现) 与 2 原子性(CAS ,CPU 指令实现)
共享锁和排它锁(ReentrantReadWriteLock):
共享锁与排他锁 共用一个线程队列。
在共享状态下,一个线程无论是获取还是释放锁的时候,都会试着去唤醒下一个等待在这个锁上的节点(通过上面的doAcquireShared代码能看出)。如果下一个线程也是处于共享状态等待在锁上,那么这个线程就会被唤醒,然后接着试着去唤醒下一个等待在这个锁上的线程,这种唤醒动作会一直持续下去,直到遇到一个在排它状态下阻塞在这个锁上的线程,或者等待队列全部被释放为止。
因为线程是在一个FIFO的等待队列中,所以,这这样一个一个往后传递,就能保证唤醒被传递下去。
http://blog.csdn.net/yanlinwang/article/details/41172697
ReentrantLock 与 Condition 模型
整个协作过程是靠结点在AQS的等待队列和Condition的等待队列中来回移动实现的,Condition作为一个条件类,很好的自己维护了一个等待信号的队列,并在适时的时候将结点加入到AQS的等待队列中来实现的唤醒操作http://ifeve.com/understand-condition/
三个线程ABC,交替打印ABC
http://blog.csdn.net/luckybug007/article/details/70053596
CountDownLatch源码浅析
http://www.cnblogs.com/booth-sun/p/7241648.html