首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CyclicBarrier重用示例

CyclicBarrier重用示例
EN

Stack Overflow用户
提问于 2015-09-10 12:51:14
回答 1查看 1.8K关注 0票数 5

在这种情况下,CyclicBarrier最适合吗?我希望分阶段并行运行n个线程(在阶段中等待直到所有线程完成该阶段)。

代码语言:javascript
复制
        public class CyclicBarr {


        public static void main(String[] args) {


            CyclicBarrier barrier = new CyclicBarrier(3, new Runnable() {
                private int count =1;
                @Override
                public void run() {
                    System.out.println("Completed..!! "+(count++));
                }
            });

            for (int i = 1; i <= 3; i++) {

                Thread t = new Thread(new CuclicBarThread(barrier));
                t.start();

            }



        }
    }

丝线是

代码语言:javascript
复制
        public class CuclicBarThread implements Runnable {

        CyclicBarrier barrier;

        public CuclicBarThread(CyclicBarrier barrier) {
            this.barrier = barrier;
        }

        @Override
        public void run() {
            try {
                for (int i = 1; i < 5; i++) {
                    Thread.sleep(100);
                }
                System.out.println(Thread.currentThread().getName() + " :: Waiting At Barrier 1 After Stage 1 Completed");
                barrier.await();

                for (int i = 1; i < 5; i++) {
                    Thread.sleep(1000);
                }
                System.out.println(Thread.currentThread().getName() + " :: Waiting At Barrier 2 After Stage 2 Completed");
                barrier.await();

                for (int i = 1; i < 5; i++) {
                    Thread.sleep(100);
                }
                System.out.println(Thread.currentThread().getName() + " :: Waiting At Barrier 3 After Stage 3 Completed");
                barrier.await();
                System.out.println(Thread.currentThread().getName()+" :: $$$$$$$$ Completed $$$$$$$$");
            } catch (Exception ex) {
                ex.printStackTrace();
            }



        }
    }
EN

回答 1

Stack Overflow用户

发布于 2015-09-13 18:29:49

是的是可重复使用的。这就是为什么它被称为“循环”。这是它的JavaDoc的引文

一种同步工具,它允许一组线程都等待对方到达一个共同的障碍点。CyclicBarriers在涉及固定大小线程的程序中非常有用,这些线程必须偶尔等待对方。这个屏障被称为循环,因为它可以在等待线程释放后被重用。

对我来说,你对CyclicBarrier的使用似乎还不错。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32502435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档