美文网首页
Java CountDownLatch和CyclicBarrie

Java CountDownLatch和CyclicBarrie

作者: zeekyai | 来源:发表于2017-02-24 17:05 被阅读0次

    CountDownLatch 允许一个或多个线程等待其他线程完成操作。

    public class CountDownLatchTest {
        public static void main(String[] args) {
            // 等待子线程的数量
            int num = 10000;
            CountDownLatch countDownLatch = new CountDownLatch(num);
            for (int i = 0; i < num; i++) {
                // CountDownLatch作为子线程对象的成员变量
                Thread t = new Thread(new Job(i, countDownLatch));
                t.start();
            }
            try{
                countDownLatch.await();
            }catch(InterruptedException e){}
    
            System.out.println("done");
        }
    }
    
    class Job implements Runnable {
        private int id;
        private CountDownLatch countDownLatch;
    
        public Job(int id, CountDownLatch countDownLatch) {
            this.id = id;
            this.countDownLatch = countDownLatch;
        }
    
        @Override
        public void run() {
            System.out.println(id);
            // 子线程执行完任务通知主线程
            countDownLatch.countDown();
        }
    }
    

    CyclicBarrier 让一组线程到达一个同步点时被阻塞,直到所有线程到达同步点,此时线程才可以继续执行同步点后面的操作。

    public class CyclicBarrierTest {
        public static void main(String[] args) {
            int num = 10;
            CyclicBarrier cyclicBarrier = new CyclicBarrier(num);
            for(int i = 0; i < num; i++){
                Thread t = new Thread(new Worker(i, cyclicBarrier));
                t.start();
            }
        }
    }
    
    class Worker implements Runnable{
        private int id;
        private CyclicBarrier cyclicBarrier;
    
        public Worker(int id, CyclicBarrier cyclicBarrier) {
            this.id = id;
            this.cyclicBarrier = cyclicBarrier;
        }
    
        @Override
        public void run() {
            try{
                System.out.println("before " + id);
                cyclicBarrier.await();
            }catch(Exception e){}
            System.out.println("after " + id);
        }
    }
    

    相关文章

      网友评论

          本文标题:Java CountDownLatch和CyclicBarrie

          本文链接:https://www.haomeiwen.com/subject/dcvwwttx.html