当前位置: 代码迷 >> J2SE >> 问个并发的有关问题:CyclicBarrier和CountDownLatch的区别
  详细解决方案

问个并发的有关问题:CyclicBarrier和CountDownLatch的区别

热度:5459   发布时间:2013-02-25 00:00:00.0
问个并发的问题:CyclicBarrier和CountDownLatch的区别
我知道CyclicBarrier使多个线程互相等待,CountDownLatch使一个线程或多个线程等待其他线程,但是那不是CountDownLatch完全可以替代CyclicBarrier了,代码如下:
Java code
import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class line3 implements Runnable{    private CountDownLatch cd;    private int id;    public line3(CountDownLatch cd,int id){        this.cd=cd;        this.id=id;    }    public void run() {            try {                TimeUnit.MILLISECONDS.sleep(id*1000);//doSomeThing...                cd.countDown();//这样子不是和CyclicBarrier效果一样...                System.out.println("countDown"+id);                cd.await();            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println("line3  "+id);    }    public static void main(String[] args) {        CountDownLatch cd=new CountDownLatch(10);        ExecutorService es=Executors.newCachedThreadPool();                for (int i = 0; i < 10; i++) {            es.execute(new line3(cd,i));        }        es.shutdown();    }}

另外书上说:CountDownLatch只触发一次,CylicBarrier可以触发多次,看不大明白,求高手通俗点的解释..或者给个例子也行..

------解决方案--------------------------------------------------------
我认为这两个同步器的区别在 API 的文档中已经说明得很清楚了。

CyclicBarrier(循环障栅)从名字中就可以看出来是可以循环使用的。
CountDownLatch(倒计数门闩)顾名思义就是倒计数器,应该没有再来一次的倒计数器吧,哈哈。
  相关解决方案