zoukankan      html  css  js  c++  java
  • 并发编程系列【CyclicBarrier】

    作用:执行第一个参数指定的次数之后,最后一个线程执行第二个参数中的任务。

    应用场景:在微服务中调用五个接口,确保5个接口执行完毕,再执行自己的业务逻辑。

    import java.util.Random;
    import java.util.concurrent.CyclicBarrier;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class CyclicBarrierDemo {
    
        static class Task implements Runnable {
            
            CyclicBarrier barrier;
            
            public Task(CyclicBarrier barrier) {
                this.barrier = barrier;
            }
            
            @Override
            public void run() {
                try {
                    Thread.sleep(new Random().nextInt(10) * 1000);
                    System.out.println(Thread.currentThread().getName() + " 检查火箭");
                    barrier.await();//标记子任务执行完了,让count++  => 满足count => 调用CyclicBarrier的参数2任务
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        
        public static void main(String[] args) {
            int count = 10;
            ExecutorService exec = Executors.newFixedThreadPool(count);
    
    
            CyclicBarrier barrier = new CyclicBarrier(5, new Runnable() {
                
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName() + " -------------------发射火箭");
                }
            });
            
            for(int i = 0; i < count; i++) {
                exec.execute(new Task(barrier));
            }
            exec.shutdown();
        }
        
    }
  • 相关阅读:
    mysql两种重要的引擎
    mysql常用代码
    ubuntu常用基本命令
    redis缓存服务器
    memcached缓存服务器
    glusterfs分布式文件服务器
    keepalived双机热备(nginx+mysql)
    nginx负载均衡mysql数据库
    heartbeat双机热备(haproxy或glbd+mysql)
    haproxy负载均衡mysql
  • 原文地址:https://www.cnblogs.com/hujunwei/p/15659616.html
Copyright © 2011-2022 走看看