• JAVA多线程


    直接上代码去跑发现其中的规律即可

    public class ThreadPollUtil {
        private static int corePoolSize = Runtime.getRuntime().availableProcessors();
    
        /**
         * corePoolSize 用于指定核心线程数量
         * maximumPoolSize 指定最大线程数
         * keepAliveTime和TimeUnit指定线程空闲后的最大存活时间
         */
        public static ThreadPoolExecutor executor  = new ThreadPoolExecutor(corePoolSize, corePoolSize+1, 10l, TimeUnit.SECONDS,
                new LinkedBlockingQueue<Runnable>(1000));
    
    /*
        让主线程等待  CountDownLatch 任务计数器
    
        countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。
    
        是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。
    */
    
    
        public static void main(String[] args) throws InterruptedException {
            //创建一个三个子线程 初始化计数器
            Map<Object, Object> map = new HashMap<>();
            CountDownLatch countDownLatch = new CountDownLatch(3);
    
            Long m=1000000000L;
            long time11 = System.currentTimeMillis();
            ThreadPollUtil.executor.submit(new Runnable() {
                @Override
                public void run() {
                    long time1 = System.currentTimeMillis();
                    int i=0;
                    for (int i1 = 0; i1 < m; i1++) {
                        i=i1+i;
                    }
                    map.put("1",i);
                    //计数器-1
                    countDownLatch.countDown();
    
                    long time2 = System.currentTimeMillis();
                    System.out.println("线程一"+(time1 - time2) + "毫秒。");
                }
            });
            ThreadPollUtil.executor.submit(new Runnable() {
                @Override
                public void run() {
                    long time1 = System.currentTimeMillis();
                    int i=0;
    
                    for (int i1 = 0; i1 < m; i1++) {
                        i=i1+i;
                    }
                    map.put("1",i);
                    //计数器-1
                    countDownLatch.countDown();
    
                    long time2 = System.currentTimeMillis();
                    System.out.println("线程二"+(time1 - time2) + "毫秒。");
                }
            });
            ThreadPollUtil.executor.submit(new Runnable() {
                @Override
                public void run() {
                    long time1 = System.currentTimeMillis();
                    int i=0;
                    for (int i1 = 0; i1 < m; i1++) {
                        i=i1+i;
                    }
                    map.put("1",i);
                    //计数器-1
                    countDownLatch.countDown();
    
                    long time2 = System.currentTimeMillis();
                    System.out.println("线程三"+(time1 - time2) + "毫秒。");
                }
            });
    
            /**
             * 通过await方法让主线程等待
             */
            countDownLatch.await();
            long time22 = System.currentTimeMillis();
            System.out.println("总线程"+(time11 - time22) + "毫秒。");
    
        }
    }

    再做个比较没有使用多线程的自上而下的逻辑

    class Xxx{
        public static void main(String[] args) throws InterruptedException {
            
    
                    long time1 = System.currentTimeMillis();
                    int i=0;
                    Long m=1000000000L;
                    for (int i1 = 0; i1 < m; i1++) {
                        i=i1+i;
                    }
            System.out.println("执行一");
                    for (int i1 = 0; i1 < m; i1++) {
                        i=i1+i;
                    }
            System.out.println("执行二");
                    for (int i1 = 0; i1 < m; i1++) {
                        i=i1+i;
                    }
            System.out.println("执行三");
            long time2 = System.currentTimeMillis();
            System.out.println("总线程"+(time1 - time2) + "毫秒。");
    
        }
    
    }
  • 相关阅读:
    《剑指offer》-判断平衡二叉树
    《剑指offer》-前n项和不准用通解和各种判断
    《剑指offer》-统计整数二进制表示中1的个数
    《剑指offer》-双栈实现队列
    《剑指offer》-数组乘积,不使用除法
    《剑指offer》-青蛙跳台阶II
    gradle入门(1-8)gradle 的依赖查看、依赖排除和指定版本(需要验证!)
    groovy入门(2-1)Groovy的Maven插件安装:Plugin execution not covered by lifecycle configuration
    zuul入门(4)zuul的注解@EnableZuulServer和@EnableZuulProxy
    zuul入门(2)zuul的过滤器分类和加载
  • 原文地址:https://www.cnblogs.com/doge-elder/p/13181857.html
Copyright © 2020-2023  润新知