zoukankan      html  css  js  c++  java
  • 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) + "毫秒。");
    
        }
    
    }
  • 相关阅读:
    FusionCharts ScrollColumn2D图
    Java Web项目部署Tomcat运行出错
    Eclipse部署Java Web项目到Tomcat出错
    JavaScript过滤特殊字符
    pl/sql 在一个程序块里打印日志输出到表格
    Java中过滤出字母、数字和中文的正则表达式
    pl/sql 程序块里打印问题
    C++函数的Boost内存池性能介绍
    boost内存池的使用介绍
    内存管理 Boost::singleton_pool
  • 原文地址:https://www.cnblogs.com/doge-elder/p/13181857.html
Copyright © 2011-2022 走看看