首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环屏障等待方法无效

循环屏障等待方法无效
EN

Stack Overflow用户
提问于 2017-08-24 21:47:15
回答 1查看 457关注 0票数 0

我正在尝试学习多线程,并且尝试使用循环屏障。我知道,要突破障碍,在创建屏障时,必须用所提到的线程数来调用等待方法。我也试图这样做,但当我检查是否突破了障碍,我的主要方法是一个无限循环。

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

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

    public void run() {

        System.out.println("in the run method");
        try {
            Thread.sleep(1000);
            System.out.println("going to call awake on barrier"+ Thread.currentThread().getName());

            try {
                barrier.await();
            } catch (BrokenBarrierException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("barrier broke");

        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //System.out.println("Wake up from the Sleep"+ Thread.currentThread().getName());
    }

}
代码语言:javascript
复制
public class MYCountDownLatch {

    public static void main(String[] args) throws InterruptedException {

        CyclicBarrier barrier = new CyclicBarrier(2);

        Thread t1= new Thread(new CyclicBarrierTrial((barrier)));
        t1.start();
        Thread t2= new Thread(new CyclicBarrierTrial((barrier)));
        Thread.sleep(2000);
        t2.start();
        while(!barrier.isBroken())
        {
            System.out.println("waiting for the barrier to break "+barrier.isBroken());
        }

        System.out.println("MAIN THREAD  finally barrier to broke ");

    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-25 14:32:23

barrier.isBroken()表示障碍物是否处于破坏状态,这与障碍是脱扣器不同。

要检查这一点,您可以尝试中断其中一个线程,这将引发其他线程上的BarrierBrokenException,而barrier.isBroken()将为真。

代码语言:javascript
复制
  Thread.currentThread().interrupt();

如果要等待所有线程完成,则可以使用ExecutorService.awaitTerminationThread.join

来自文档:如果任何线程在等待时被中断,那么所有其他等待线程都将抛出BrokenBarrierException,并将屏障置于断开状态。

希望能帮上忙。

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

https://stackoverflow.com/questions/45871401

复制
相关文章

相似问题

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