zoukankan      html  css  js  c++  java
  • 使用CountDownLatch模拟高并发场景

    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.atomic.AtomicInteger;
    
    public class IncrTest {
        public static void concurrenceTest() {
            /**
             * 模拟高并发情况代码
             */
            final AtomicInteger atomicInteger = new AtomicInteger(0);
            final CountDownLatch countDownLatch = new CountDownLatch(1000); // 相当于计数器,当所有都准备好了,再一起执行,模仿多并发,保证并发量
            final CountDownLatch countDownLatch2 = new CountDownLatch(1000); // 保证所有线程执行完了再打印atomicInteger的值
            ExecutorService executorService = Executors.newFixedThreadPool(10);
            try {
                for (int i = 0; i < 1000; i++) {
                    executorService.submit(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                countDownLatch.await(); //一直阻塞当前线程,直到计时器的值为0,保证同时并发
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            //每个线程增加1000次,每次加1
                            for (int j = 0; j < 1000; j++) {
                                atomicInteger.incrementAndGet();
                            }
                            countDownLatch2.countDown();
                        }
                    });
                    countDownLatch.countDown();
                }
    
                countDownLatch2.await();// 保证所有线程执行完
                System.out.println(atomicInteger);
                executorService.shutdown();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) throws InterruptedException {
            concurrenceTest();
        }
    }
  • 相关阅读:
    Laravel 学习笔记之文件上传
    Composer学习
    Laravel 学习笔记之数据库操作——Eloquent ORM
    PHP至Document类操作 xml 文件
    使用promise构建一个向服务器异步数据请求
    遍历DOM树
    关于tp验证码模块
    layui 封装自定义模块
    js进阶之路,关于UI资源的优化(转载)
    关于js 重载
  • 原文地址:https://www.cnblogs.com/xubiao/p/7785042.html
Copyright © 2011-2022 走看看