美文网首页
CyclicBarrier应用

CyclicBarrier应用

作者: sunpy | 来源:发表于2019-02-27 23:56 被阅读0次

    场景

    日常操作:老爸陪老妈逛街一起出门打车,老爸在家先收拾家务,老妈化妆,然后一起打车出门。

    实现

    public class CyclicBarrierTest {
    
        private static final CyclicBarrier cb = new CyclicBarrier(2, new Runnable() {
            
            @Override
            public void run() {
                System.out.println("一起打车出门");
            }
        });
        
        public static void main(String[] args) {
            ThreadPoolExecutor tpe = new ThreadPoolExecutor(2, 
                    2, 
                    20, 
                    TimeUnit.SECONDS, 
                    new ArrayBlockingQueue<Runnable>(10));
            tpe.allowCoreThreadTimeOut(true);
            
            tpe.execute(new Runnable() {
    
                @Override
                public void run() {
                    try {
                        System.out.println("老爸收拾家务");
                        cb.await();
                    } catch (InterruptedException | BrokenBarrierException e) {
                        e.printStackTrace();
                    } 
                }
            });
            
            tpe.execute(new Runnable() {
    
                @Override
                public void run() {
                    try {
                        System.out.println("老妈化妆");
                        cb.await();
                    } catch (InterruptedException | BrokenBarrierException e) {
                        e.printStackTrace();
                    } 
                }
            });
        }
    }
    

    结果:

    老爸收拾家务
    老妈化妆
    一起打车出门
    

    总结:

    多个线程到达指定的屏障点,才可以执行。最后一个线程到达屏障后,最后执行的线程在构造器传入。还可以通过reset方法还可以重置屏障为初始化状态。

    相关文章

      网友评论

          本文标题:CyclicBarrier应用

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