java barrier

作者:原创时间:2022-03-24
文档

java barrier是什么,让我们一起了解一下?

barrier是Java中的CyclicBarrier,是可循环使用的屏障,要做的事情就是让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。

CyclicBarrier有什么常用方法?

首先在所有参与者都已经在此 barrier 上调用 await方法之前,将被一直等待。如果当前线程不是将到达的最后一个线程,出于调度目的,将禁用它,且在发生以下情况之一前,该线程将一直处于休眠状态。

最后一个线程到达,或者其他某个线程中断当前线程,或者其他某个线程中断另一个等待线程,或者其他某个线程在等待 barrier 时超时,或者其他某个线程在此 barrier 上调用 reset()

如果当前线程在进入此方法时已经设置了该线程的中断状态,或者在等待时被中断,则抛出 InterruptedException,并且清除当前线程的已中断状态。

如果在线程处于等待状态时 barrier 被 reset(),或者在调用 await 时 barrier 被损坏,抑或任意一个线程正处于等待状态,则出 BrokenBarrierException 异常。

如果任何线程在等待时被中断,则其他所有等待线程都将抛出 BrokenBarrierException 异常,并将 barrier 置于损坏状态。

如果当前线程是最后一个将要到达的线程,并且构造方法中提供了一个非空的屏障操作,则在允许其他线程继续运行之前,当前线程将运行该操作。如果在执行屏障操作过程中发生异常,则该异常将传播到当前线程中,并将 barrier 置于损坏状态。

示例代码如下:

public static void main(String[] args) {
    CyclicBarrier c = new CyclicBarrier(2);
    Thread t1 = new Thread(){
        @Override
        public void run() {
            System.out.println("我到了");
            try {
                c.await();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    };
    t1.start();
    System.out.println("我到了");
    try {
        c.await();
    }catch (Exception e){
        e.printStackTrace();
    }
    System.out.println("门开了");
}

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java base64 java base64decoder java bean 手机充电时可以玩手机吗 手机充电发热发烫是什么原因 java beanutils java benchmark java bigdecimal excel表格怎么合并单元格 java binary java binder win10c盘满了怎么清理 java binlog 如何清理win10电脑c盘 java bit java blob java break wps怎么求和 java bufferedimage java bufferedoutputstream java bacnet win10专业版和企业版的区别 java async java assembly java aspose java aspectj java asmx java ascii java arrays.sort java args java arctan java arccos java arcsin java archive java apriori java application java append 苹果13蓝牙搜索不到设备怎么办 java apns java ant