CountDownLatch,CyclicBarrier和信号量Semaphore都是java并发包concurrent下提供的并发工具类,是比synchrorized关键字更高效的同步结构。
CountDownLatch的用法顾名思义有一个计数器的概念,其应用场景是,如果B组线程要等A组线程全部执行完后再执行,那A组中每个线程都会调用其countDown方法计数,即A组中每跑一个线程计数加一。而B组中每个线程都会调用其await()方法。只有当计数达到预设值后,因调用await()方法而处于等待状态的线程全部执行。CountDownLatch可以用于高并发测试,即计数积累了一定数量的线程后再一起执行。
用法示例:
CyclicBarrier和CountDownLatch有点像,不过他不是计数。CyclicBarrier在初始化的时候可以定义一个参与线程的数量,即parties同伴数量,有点抽象,接下来线程中会先调用一个await()方法使线程处于等待状态。只有当有预设值parties个线程调用了await()方法后,那这parties个线程才能继续执行。简单点说就是凑齐了一拨人一起走。这里就有一个generation概念,即同一代线程,也就是前面说的同一拨人。值得注意的是当同一代线程一起执行后,generation会被自动重置,开始下一代的互相await()和一起执行。这也是和CountDownLatch区别最大的地方,Cou