• 使用CountDownLatch进行并发测试


    package com.example;
    
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.atomic.AtomicInteger;
    
    public class CountDownLatchDemo {
    
        public static void main(String[] args) throws InterruptedException {
            final MyNumber myNumber = new MyNumber();
            AtomicInteger integer = new AtomicInteger(0);
    
            int threadCount = Runtime.getRuntime().availableProcessors();
            ExecutorService executorService = Executors.newFixedThreadPool(threadCount);
            final CountDownLatch concurrentLatch = new CountDownLatch(threadCount);
            final CountDownLatch concurrentLatchV2 = new CountDownLatch(threadCount);
            final CountDownLatch completedLatch = new CountDownLatch(threadCount);
            System.out.println("threadCount: " + threadCount);
    
            for (int i = 0; i < threadCount; i++) {
                executorService.execute(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            // 保证同时并发
                            concurrentLatch.await();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        for (int i = 0; i < 10000; i++) {
                            myNumber.increase();
                        }
    
                        try {
                            concurrentLatchV2.await();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        for (int i = 0; i < 10000; i++) {
                            integer.incrementAndGet();
                        }
    
                        completedLatch.countDown();
                    }
                });
    
                concurrentLatch.countDown();
                concurrentLatchV2.countDown();
            }
    
    
            completedLatch.await();
    
            System.out.println("result: " + myNumber.value());
            System.out.println("resultV2: " + integer.get());
    
            // shutdown
            // 启动有序关闭,其中执行先前提交的任务,但不会接受新任务。 如果已经关闭,调用没有额外的效果。
            // 此方法不等待先前提交的任务完成执行。 使用awaitTermination来做到这一点。
            executorService.shutdown();
            // maximum wait 1000 ms
            // awaitTermination
            // 阻塞直到所有任务在关闭请求后完成执行,或发生超时,或当前线程被中断,以先发生者为准。
            if (!executorService.awaitTermination(1000, TimeUnit.MILLISECONDS)) {
                // shutdownNow
                // 尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。
                // 此方法不会等待主动执行的任务终止。 使用awaitTermination来做到这一点。
                // 除了尽力尝试停止处理正在执行的任务之外,没有任何保证。 例如,典型的实现将通过Thread.interrupt取消,因此任何未能响应中断的任务可能永远不会终止。
                executorService.shutdownNow();
            }
            if (!executorService.isShutdown()) {
                System.out.println("executorService still not shutdown.");
            }
        }
    
        private static class MyNumber {
            private int num = 0;
    
            public void increase() {
                num++;
            }
    
            public int value() {
                return num;
            }
        }
    
    }
    
    本博客(liqipeng)除非已明确说明转载,否则皆为liqipeng原创或者整理,转载请保留此链接:https://www.cnblogs.com/liqipeng/p/15448814.html

    本博客(liqipeng)除非已明确说明转载,否则皆为liqipeng原创或者整理,转载请保留此链接:https://www.cnblogs.com/liqipeng/p/15448814.html
    如果你觉得这篇文章对你有帮助或者使你有所启发,请点击右下角的推荐按钮,谢谢,:)
  • 相关阅读:
    Cocos2dx引擎10-事件派发
    IE无法打开internet网站已终止操作的解决的方法
    让程序在崩溃时体面的退出之Dump文件
    天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
    cocos 3.0 一键打包android平台应该注意的细节
    Matlab画图-非常具体,非常全面
    linux和windows文件名称长度限制
    Javascript的DOM操作
    50个高端大气上档次的管理后台界面模板
  • 原文地址:https://www.cnblogs.com/liqipeng/p/15448814.html
Copyright © 2020-2023  润新知