• 使用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();
        }
    }
  • 相关阅读:
    Laya中使用Protobuf
    Laya中第三方库的使用
    Laya的骨骼换装
    Laya的粒子效果
    Laya的预设Prefab (预制件)
    Egret EUI Tab + ViewStack
    Egret 划线手势动画 (切水果)
    Egret3.2.6老项目转成5.2.22微信小游戏,遇到exml加载不了问题
    AndroidUI设计 之 图片浏览器
    Android应用的自动更新模块
  • 原文地址:https://www.cnblogs.com/xubiao/p/7785042.html
Copyright © 2020-2023  润新知