美文网首页
Java并发编程(二):CyclicBarrier

Java并发编程(二):CyclicBarrier

作者: 尹学姐 | 来源:发表于2018-06-12 21:05 被阅读0次

    Java并发编程:CyclicBarrier

    简介

    字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。

    主要方法

    // parties表示需要进入barrier状态的线程数量
    // barrierAction指达到数量后执行的操作
    public CyclicBarrier(int parties, Runnable barrierAction) { }
    
    public CyclicBarrier(int parties) { }
    
    // await让线程进入barrier状态
    public int await() throws InterruptedException, BrokenBarrierException { };
    
    public int await(long timeout, TimeUnit unit)throws InterruptedException,BrokenBarrierException,TimeoutException { };
    

    示例

    public class Test {
        public static void main(String[] args) {
            int N = 4;
            CyclicBarrier barrier  = new CyclicBarrier(N,new Runnable() {
                @Override
                public void run() {
                    System.out.println("当前线程"+Thread.currentThread().getName());   
                }
            });
             
            for(int i=0;i<N;i++)
                new Writer(barrier).start();
        }
        static class Writer extends Thread{
            private CyclicBarrier cyclicBarrier;
            public Writer(CyclicBarrier cyclicBarrier) {
                this.cyclicBarrier = cyclicBarrier;
            }
     
            @Override
            public void run() {
                System.out.println("线程"+Thread.currentThread().getName()+"正在写入数据...");
                try {
                    Thread.sleep(5000);      //以睡眠来模拟写入数据操作
                    System.out.println("线程"+Thread.currentThread().getName()+"写入数据完毕,等待其他线程写入完毕");
                    cyclicBarrier.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }catch(BrokenBarrierException e){
                    e.printStackTrace();
                }
                System.out.println("所有线程写入完毕,继续处理其他任务...");
            }
        }
    }
    
    

    参考资料

    相关文章

      网友评论

          本文标题:Java并发编程(二):CyclicBarrier

          本文链接:https://www.haomeiwen.com/subject/hnnreftx.html