zoukankan      html  css  js  c++  java
  • CountDownLatch和CyclicBarrier使用上的区别

    一、CountDownLatchDemo

    package com.duchong.concurrent;
    
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.CountDownLatch;
    
    /*
     * CountDownLatch :阻塞主线程,等子线程完成
     */
    public class CountDownLatchDemo {
    
    
       /**
        * 存放子线程产生的结果
        */
       private static ConcurrentHashMap<String,Integer> resultMap =new ConcurrentHashMap<>();
    
       public static void main(String[] args) {
    
          final CountDownLatch latch = new CountDownLatch(5);
    
          SubThread subThread = new SubThread(latch);
    
          for (int i = 0; i <=4; i++) {
             new Thread(subThread).start();
          }
          try {
             //阻塞主线程
             latch.await();
          }
          catch (InterruptedException e) {
          }
    
          //计算总结果
          int sum=0;
          for(Map.Entry<String,Integer> subNumber:resultMap.entrySet()){
             sum +=subNumber.getValue();
          }
          System.out.println("sum = "+sum);
       }
    
    
       /**
        * 子线程
        */
       static class SubThread implements Runnable {
    
          private CountDownLatch latch;
    
          public SubThread(CountDownLatch latch) {
             this.latch = latch;
          }
    
          @Override
          public void run() {
    
             String name = Thread.currentThread().getName();
             try {
                int number = RandomUtil.getNumber();
                System.out.println(name+"---number:"+number);
                resultMap.put(name,number);
             }
             finally {
                latch.countDown();
             }
    
          }
    
       }
    }
    

    二、CyclicBarrierDemo

    package com.duchong.concurrent;
    
    import java.util.Map;
    import java.util.concurrent.BrokenBarrierException;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.CyclicBarrier;
    
    /*
     * CyclicBarrier :阻塞子线程,当等待中的子线程数到达一定数量时,跳闸。
     */
    public class CyclicBarrierDemo {
    
        /**
         * 屏障,初始5 当await()的线程数量达到5时,跳闸。
         */
        static CyclicBarrier c = new CyclicBarrier(5,new SumThread());
    
        /**
         * 存放子线程产生的结果
         */
        private static ConcurrentHashMap<String,Integer> resultMap =new ConcurrentHashMap<>();
    
        public static void main(String[] args) {
    
            //模拟四个子线产生随机数值
            for(int i=0;i<=4;i++){
                new Thread(new SubThread()).start();
            }
        }
    
        /**
         * 所有子线程等待数等于5时,执行
         */
        private static class SumThread implements Runnable{
    
            @Override
            public void run() {
                int result =0;
                for(Map.Entry<String,Integer> workResult:resultMap.entrySet()){
                    result = result+workResult.getValue();
                }
                System.out.println("result = "+result);
            }
        }
    
        /**
         * 子线程
         */
        static class SubThread implements Runnable{
    
    
            @Override
            public void run() {
    
                String name = Thread.currentThread().getName();
    
                int number = RandomUtil.getNumber();
                System.out.println(name+"---number:"+number);
    
                resultMap.put(name,number);
    
    
                try {
                    //阻塞子线程
                    c.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
    
            }
        }
    
    }
    

  • 相关阅读:
    Java对象的生命周期与作用域的讨论(转)
    [置顶] Oracle学习路线与方法
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
  • 原文地址:https://www.cnblogs.com/geekdc/p/11541266.html
Copyright © 2011-2022 走看看