【问题标题】:What's the number should be the "n" of new CyclicBarrier(n)?new CyclicBarrier(n) 的“n”应该是多少?
【发布时间】:2011-03-06 02:44:14
【问题描述】:

最近学习了CyclicBarrier,但是这里有个问题:

代码:

public class Main {
    public static CyclicBarrier c;

    public static void main(String[] agrs){
        int threadsCount = 5;
        c = new CyclicBarrier(threadsCount + 1);
        // make 5 A threads to run
    }
}

public class A implements Runnable {

    public void run(){
        // do something
       Main.c.await();
        // do something
    }
}

关于代码,我想知道为什么我必须通过 (threadsCount + 1) 而不是 (threadsCount) 来初始化 CyclicBarrier,因为我从未在 main 方法中调用 await()?

【问题讨论】:

  • 你不能。如果您运行threadsCount 线程,您的代码将无法运行,因为调用await() 的线程数必须等于 与CyclicBarrier 中的参与方数!您在省略的代码中一定做错了什么。 BTW:你昨天确实问过same question,为什么被删了?

标签: java multithreading cyclicbarrier


【解决方案1】:

n 是参与方的数量,其中new CyclicBarrier(n) 创建了一个新的 CyclicBarrier,当给定数量的参与方(线程)正在等待它时将触发,并且不对每个障碍执行预定义的操作。

我假设原始线程被视为访问屏障,因此当您创建 5 个新线程时,如果您没有等待 5+1 线程,那么您会在准备好之前绊倒。

【讨论】:

    【解决方案2】:

    您必须指定将在CyclicBarrier 上等待的确切参与方数量,如果您指定 n+1,那么您必须让 n+1 个线程在 CyclicBarrier 上调用 wait 以使其跳闸.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 2019-03-23
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      相关资源
      最近更新 更多