CyclicBarrier

循环栅栏,什么时候人满了就把栅栏推到,都放出去,出去之后栅栏又重新起来,再等人满了,再放开。

比如有一个复杂的操作,需要访问数据库,需要访问网络,需要访问文件,有一种方式是可以顺序执行,但这样效率太低了,另外可以并发执行,一个线程去访问数据库,一个线程访问网络,一个线程访问文件,等三个线程都执行完之后再做后续操作。这个时候就可以用CyclicBarrier。

public class Study07 {

    public static void main(String[] args) {

        CyclicBarrier barrier =new CyclicBarrier(3, () -> {

            System.out.println("执行后续操作");

        });

        new Thread(()->{

            System.out.println("访问数据库...");

            try {

                barrier.await();

            }catch (InterruptedException e) {

                e.printStackTrace();

            }catch (BrokenBarrierException e) {

                e.printStackTrace();

            }

        }).start();

        new Thread(()->{

            System.out.println("访问网络...");

            try {

                barrier.await();

            }catch (InterruptedException e) {

                e.printStackTrace();

            }catch (BrokenBarrierException e) {

                e.printStackTrace();

            }

        }).start();

        new Thread(()->{

            System.out.println("访问文件...");

            try {

                barrier.await();

            }catch (InterruptedException e) {

                e.printStackTrace();

            }catch (BrokenBarrierException e) {

                e.printStackTrace();

            }

        }).start();

    }

}

执行结果:

访问数据库...

访问网络...

访问文件...

执行后续操作

你可能感兴趣的:(CyclicBarrier)