札记2——关于几种新并发容器或类的通俗理解

<Java Concurrency in Practice>笔记2——关于几种新并发容器或类的通俗理解
关于几种新并发容器或类的通俗理解
SynchronousQueue
没有容量,两个线程一个来put,另一个take才会交换,只有一个请求时阻塞,和exchanger有点像

CountDownLatch 
obj = new CountDownLatch(n);
obj.await();
obj.countDown()


初始化需要个int形参数,可以想象一个赛马场的闸门控制系统。
马进赛道前关在闸门里。
每个驭手在准备好的时候,调用系统的await表示我准备好了。
n表示系统倒数几个数,每countDown一次表示倒数一次,5--4---3---2---1 此刻闸门同时打开,开始万马奔腾。

有个注意处,await其实是表示门,作用只是相当于那个门挡在那,当每个驭手准备好await时,只是表示你在这等着开跑了但你越不过门,
你不调await就是表示不遵守游戏规则,自己自己绕过门跑了,这个不算。
但如果你还没有来得及await的时候,系统已经倒数完发令开闸,那个时候你await左右就不大了,相当于个空调用。

CyclicBarrier
和CountDownLatch很像。
区别是:1.CountDownLatch中的万马奔腾开始时间是countDown倒数n次。而CyclicBarrier的开始时间是n个await完毕。还以上面的赛马距离,
每个驭手准备好都大喊“我准备好了”(调用await),当最后一个驭手喊完后大家一起放马开跑。
2.CyclicBarrier顾名思义,可以循环使用