zoukankan      html  css  js  c++  java
  • 006-多线程-JUC线程池-并发测试程序

    一、java代码模拟并发

    1.1、一次并发

    单次并发测试

    1、使用CountDownLatch

      等待一个或多个线程一起执行

      详细参看:007-多线程-锁-JUC锁-CountDownLatch-闭锁【允许一个或多个线程,等待其他一组线程完成操作,再继续执行】

    示例代码

        @Test
        public void poolCountDownLatch() throws Exception {
            int parrelnum=100;
            //所有线程阻塞,然后统一开始
            CountDownLatch begin = new CountDownLatch(1);
            //主线程阻塞,直到所有分线程执行完毕
            CountDownLatch end = new CountDownLatch(parrelnum);
            List<Future<String>> futureList = new ArrayList<>();
            ExecutorService fixedThreadPool = Executors.newFixedThreadPool(parrelnum);
            for (int i = 0; i < parrelnum; i++) {
                Future<String> submit = fixedThreadPool.submit(() -> {
                    try {
                        //begin 阻塞所有线程
                        begin.await();
                        System.out.println("======-----------------------------"+ LocalDateTime.now());
    //                    System.out.println("======-----------------------------"+ LocalDateTime.now()
    //                            +":"+Thread.currentThread().getName()
    //                            +";守护线程:"+Thread.currentThread().isDaemon());
                        Thread.sleep(new Random().nextInt(2000));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    finally {
                        //end 执行完代码减一
                        end.countDown();
                    }
                    return "ok:"+LocalDateTime.now();
                });
                futureList.add(submit);
            }
            fixedThreadPool.shutdown();
    
            try {
                System.out.println(LocalDateTime.now()+":"+"1秒后统一开始");
                Thread.sleep(1000);
                //begin 减一 = 0 唤醒 阻塞的所有线程
                begin.countDown();
                for (Future<String> future : futureList) {
                    System.out.println(future.get());
                }
                //end 等待所有代码执行完毕
                end.await();
                System.out.println(LocalDateTime.now()+":"+"全部结束");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    输出:

    2019-08-02T22:58:23.762:1秒后统一开始
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.765
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.768
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.768
    ======-----------------------------2019-08-02T22:58:24.768
    ======-----------------------------2019-08-02T22:58:24.768
    ======-----------------------------2019-08-02T22:58:24.768
    ======-----------------------------2019-08-02T22:58:24.768
    ======-----------------------------2019-08-02T22:58:24.765
    ======-----------------------------2019-08-02T22:58:24.765
    ======-----------------------------2019-08-02T22:58:24.765
    ======-----------------------------2019-08-02T22:58:24.765
    ======-----------------------------2019-08-02T22:58:24.765
    ======-----------------------------2019-08-02T22:58:24.765
    ======-----------------------------2019-08-02T22:58:24.765
    ======-----------------------------2019-08-02T22:58:24.765
    ======-----------------------------2019-08-02T22:58:24.765
    ======-----------------------------2019-08-02T22:58:24.764
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.773
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.770
    ======-----------------------------2019-08-02T22:58:24.769
    ======-----------------------------2019-08-02T22:58:24.769
    ok:2019-08-02T22:58:24.924
    ok:2019-08-02T22:58:25.803
    ok:2019-08-02T22:58:26.473
    ok:2019-08-02T22:58:25.947
    ok:2019-08-02T22:58:25.891
    ok:2019-08-02T22:58:25.859
    ok:2019-08-02T22:58:25.457
    ok:2019-08-02T22:58:26.443
    ok:2019-08-02T22:58:25.457
    ok:2019-08-02T22:58:26.157
    ok:2019-08-02T22:58:25.003
    ok:2019-08-02T22:58:24.979
    ok:2019-08-02T22:58:25.698
    ok:2019-08-02T22:58:25.084
    ok:2019-08-02T22:58:25.102
    ok:2019-08-02T22:58:26.083
    ok:2019-08-02T22:58:26.377
    ok:2019-08-02T22:58:25.669
    ok:2019-08-02T22:58:26.360
    ok:2019-08-02T22:58:26.640
    ok:2019-08-02T22:58:26.321
    ok:2019-08-02T22:58:26.087
    ok:2019-08-02T22:58:26.226
    ok:2019-08-02T22:58:24.833
    ok:2019-08-02T22:58:26.736
    ok:2019-08-02T22:58:25.497
    ok:2019-08-02T22:58:25.374
    ok:2019-08-02T22:58:26.377
    ok:2019-08-02T22:58:26.764
    ok:2019-08-02T22:58:24.889
    ok:2019-08-02T22:58:26.419
    ok:2019-08-02T22:58:25.174
    ok:2019-08-02T22:58:25.447
    ok:2019-08-02T22:58:24.957
    ok:2019-08-02T22:58:24.817
    ok:2019-08-02T22:58:24.809
    ok:2019-08-02T22:58:26.764
    ok:2019-08-02T22:58:26.035
    ok:2019-08-02T22:58:25.855
    ok:2019-08-02T22:58:26.310
    ok:2019-08-02T22:58:26.412
    ok:2019-08-02T22:58:26.210
    ok:2019-08-02T22:58:25.569
    ok:2019-08-02T22:58:25.039
    ok:2019-08-02T22:58:25.846
    ok:2019-08-02T22:58:26.328
    ok:2019-08-02T22:58:24.802
    ok:2019-08-02T22:58:25.970
    ok:2019-08-02T22:58:25.970
    ok:2019-08-02T22:58:25.475
    ok:2019-08-02T22:58:26.147
    ok:2019-08-02T22:58:25.937
    ok:2019-08-02T22:58:26.525
    ok:2019-08-02T22:58:25.527
    ok:2019-08-02T22:58:24.871
    ok:2019-08-02T22:58:26.246
    ok:2019-08-02T22:58:24.786
    ok:2019-08-02T22:58:25.484
    ok:2019-08-02T22:58:25.871
    ok:2019-08-02T22:58:25.240
    ok:2019-08-02T22:58:24.899
    ok:2019-08-02T22:58:24.889
    ok:2019-08-02T22:58:25.559
    ok:2019-08-02T22:58:24.856
    ok:2019-08-02T22:58:24.783
    ok:2019-08-02T22:58:25.257
    ok:2019-08-02T22:58:26.394
    ok:2019-08-02T22:58:26.471
    ok:2019-08-02T22:58:25.957
    ok:2019-08-02T22:58:25.930
    ok:2019-08-02T22:58:25.316
    ok:2019-08-02T22:58:25.323
    ok:2019-08-02T22:58:26.381
    ok:2019-08-02T22:58:26.552
    ok:2019-08-02T22:58:26.577
    ok:2019-08-02T22:58:25.369
    ok:2019-08-02T22:58:26.157
    ok:2019-08-02T22:58:25.937
    ok:2019-08-02T22:58:26.030
    ok:2019-08-02T22:58:26.693
    ok:2019-08-02T22:58:24.982
    ok:2019-08-02T22:58:25.511
    ok:2019-08-02T22:58:25.042
    ok:2019-08-02T22:58:26.307
    ok:2019-08-02T22:58:25.769
    ok:2019-08-02T22:58:25.710
    ok:2019-08-02T22:58:26.699
    ok:2019-08-02T22:58:26.047
    ok:2019-08-02T22:58:26.056
    ok:2019-08-02T22:58:24.822
    ok:2019-08-02T22:58:26.204
    ok:2019-08-02T22:58:24.803
    ok:2019-08-02T22:58:26.257
    ok:2019-08-02T22:58:25.701
    ok:2019-08-02T22:58:24.964
    ok:2019-08-02T22:58:25.678
    ok:2019-08-02T22:58:24.858
    ok:2019-08-02T22:58:25.741
    ok:2019-08-02T22:58:26.153
    ok:2019-08-02T22:58:26.023
    2019-08-02T22:58:26.766:全部结束
    View Code

    可以看到 100个线程并发,同时并发,64-73毫秒之间 即 9毫秒

    2、不使用CountDownLatch

        @Test
        public void poolNoCountDownLatch() throws Exception {
            int parrelnum=100;
            List<Future<String>> futureList = new ArrayList<>();
            ExecutorService fixedThreadPool = Executors.newFixedThreadPool(parrelnum);
            for (int i = 0; i < parrelnum; i++) {
                Future<String> submit = fixedThreadPool.submit(() -> {
                    try {
                        System.out.println("======-----------------------------"+ LocalDateTime.now());
    //                    System.out.println("======-----------------------------"+ LocalDateTime.now()
    //                            +":"+Thread.currentThread().getName()
    //                            +";守护线程:"+Thread.currentThread().isDaemon());
                        Thread.sleep(new Random().nextInt(2000));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    return "ok:"+LocalDateTime.now();
                });
                futureList.add(submit);
            }
            fixedThreadPool.shutdown();
    
            try {
                System.out.println(LocalDateTime.now()+":"+"1秒后统一开始");
                Thread.sleep(1000);
                for (Future<String> future : futureList) {
                    System.out.println(future.get());
                }
                System.out.println(LocalDateTime.now()+":"+"全部结束");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    可以看到 100个线程并发,同时并发,91-96毫秒之间 即 5毫秒

    com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.github.bjlhx15.common.base.thread.spring.controller.ThreadPoolExecutorParrelTest,poolNoCountDownLatch
    ======-----------------------------2019-08-02T23:02:42.491
    ======-----------------------------2019-08-02T23:02:42.491
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.491
    ======-----------------------------2019-08-02T23:02:42.491
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.491
    ======-----------------------------2019-08-02T23:02:42.491
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.491
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.491
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.492
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.494
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.493
    2019-08-02T23:02:42.493:1秒后统一开始
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.493
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.496
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ======-----------------------------2019-08-02T23:02:42.495
    ok:2019-08-02T23:02:43.998
    ok:2019-08-02T23:02:43.772
    ok:2019-08-02T23:02:42.961
    ok:2019-08-02T23:02:42.623
    ok:2019-08-02T23:02:44.241
    ok:2019-08-02T23:02:43.478
    ok:2019-08-02T23:02:44.477
    ok:2019-08-02T23:02:43.033
    ok:2019-08-02T23:02:43.533
    ok:2019-08-02T23:02:44.004
    ok:2019-08-02T23:02:42.856
    ok:2019-08-02T23:02:44.217
    ok:2019-08-02T23:02:44.190
    ok:2019-08-02T23:02:44.011
    ok:2019-08-02T23:02:42.603
    ok:2019-08-02T23:02:44.448
    ok:2019-08-02T23:02:44.017
    ok:2019-08-02T23:02:42.833
    ok:2019-08-02T23:02:42.808
    ok:2019-08-02T23:02:44.479
    ok:2019-08-02T23:02:43.207
    ok:2019-08-02T23:02:44.190
    ok:2019-08-02T23:02:42.677
    ok:2019-08-02T23:02:43.624
    ok:2019-08-02T23:02:42.848
    ok:2019-08-02T23:02:44.161
    ok:2019-08-02T23:02:43.904
    ok:2019-08-02T23:02:44.439
    ok:2019-08-02T23:02:44.361
    ok:2019-08-02T23:02:43.598
    ok:2019-08-02T23:02:43.777
    ok:2019-08-02T23:02:43.153
    ok:2019-08-02T23:02:42.922
    ok:2019-08-02T23:02:43.466
    ok:2019-08-02T23:02:43.689
    ok:2019-08-02T23:02:43.881
    ok:2019-08-02T23:02:42.784
    ok:2019-08-02T23:02:43.598
    ok:2019-08-02T23:02:42.691
    ok:2019-08-02T23:02:43.671
    ok:2019-08-02T23:02:43.920
    ok:2019-08-02T23:02:43.833
    ok:2019-08-02T23:02:44.415
    ok:2019-08-02T23:02:43.019
    ok:2019-08-02T23:02:44.244
    ok:2019-08-02T23:02:42.963
    ok:2019-08-02T23:02:44.361
    ok:2019-08-02T23:02:43.689
    ok:2019-08-02T23:02:43.620
    ok:2019-08-02T23:02:42.753
    ok:2019-08-02T23:02:43.055
    ok:2019-08-02T23:02:43.259
    ok:2019-08-02T23:02:43.837
    ok:2019-08-02T23:02:44.233
    ok:2019-08-02T23:02:43.483
    ok:2019-08-02T23:02:42.753
    ok:2019-08-02T23:02:43.823
    ok:2019-08-02T23:02:44.448
    ok:2019-08-02T23:02:44.361
    ok:2019-08-02T23:02:43.727
    ok:2019-08-02T23:02:42.641
    ok:2019-08-02T23:02:43.648
    ok:2019-08-02T23:02:43.282
    ok:2019-08-02T23:02:42.522
    ok:2019-08-02T23:02:44.394
    ok:2019-08-02T23:02:43.037
    ok:2019-08-02T23:02:44.366
    ok:2019-08-02T23:02:44.093
    ok:2019-08-02T23:02:43.494
    ok:2019-08-02T23:02:44.120
    ok:2019-08-02T23:02:44.283
    ok:2019-08-02T23:02:43.917
    ok:2019-08-02T23:02:44.093
    ok:2019-08-02T23:02:43.524
    ok:2019-08-02T23:02:42.593
    ok:2019-08-02T23:02:43.628
    ok:2019-08-02T23:02:42.544
    ok:2019-08-02T23:02:43.279
    ok:2019-08-02T23:02:44.182
    ok:2019-08-02T23:02:42.878
    ok:2019-08-02T23:02:44.177
    ok:2019-08-02T23:02:43.371
    ok:2019-08-02T23:02:42.538
    ok:2019-08-02T23:02:43.783
    ok:2019-08-02T23:02:43.515
    ok:2019-08-02T23:02:43.616
    ok:2019-08-02T23:02:43.241
    ok:2019-08-02T23:02:43.366
    ok:2019-08-02T23:02:42.731
    ok:2019-08-02T23:02:43.844
    ok:2019-08-02T23:02:43.423
    ok:2019-08-02T23:02:43.698
    ok:2019-08-02T23:02:43.689
    ok:2019-08-02T23:02:43.733
    ok:2019-08-02T23:02:43.459
    ok:2019-08-02T23:02:43.546
    ok:2019-08-02T23:02:44.067
    ok:2019-08-02T23:02:44.494
    ok:2019-08-02T23:02:44.054
    ok:2019-08-02T23:02:43.923
    2019-08-02T23:02:44.495:全部结束
    
    Process finished with exit code 0
    View Code

    3、小结

    故针对上述一次并发不推荐使用CountDownLatch增加程序复杂度

    1.2、循环并发 

    如,15个线程,每5个一组循环并发测试

        @Test
        public void poolCyclicBarrier() throws Exception {
            int parrelnum = 5;
            //所有线程阻塞,然后统一开始
            CyclicBarrier cyclicBarrier = new CyclicBarrier(parrelnum);
            List<Future<String>> futureList = new ArrayList<>();
            ExecutorService fixedThreadPool = Executors.newFixedThreadPool(parrelnum);
            for (int i = 0; i < 15; i++) {
                Future<String> submit = fixedThreadPool.submit(() -> {
                    try {
                        Thread.sleep(new Random().nextInt(2000));
                        //begin 阻塞所有线程
                        cyclicBarrier.await();
                        System.out.println("======-----------------------------并发:" + LocalDateTime.now());
                        Thread.sleep(new Random().nextInt(2000));
                        System.out.println("======-----------------------------" + LocalDateTime.now()
                                + ":" + Thread.currentThread().getName()
                                + ";守护线程:" + Thread.currentThread().isDaemon());
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    return "ok:" + LocalDateTime.now();
                });
                futureList.add(submit);
            }
    
            for (Future<String> future : futureList) {
                future.get();
    //                System.out.println(future.get());
            }
        }

    输出

    ======-----------------------------并发:2019-08-06T21:11:21.970
    ======-----------------------------并发:2019-08-06T21:11:21.970
    ======-----------------------------并发:2019-08-06T21:11:21.970
    ======-----------------------------并发:2019-08-06T21:11:21.970
    ======-----------------------------并发:2019-08-06T21:11:21.970
    ======-----------------------------2019-08-06T21:11:22.488:pool-1-thread-2;守护线程:false
    ======-----------------------------2019-08-06T21:11:22.610:pool-1-thread-1;守护线程:false
    ======-----------------------------2019-08-06T21:11:22.635:pool-1-thread-4;守护线程:false
    ======-----------------------------2019-08-06T21:11:23.222:pool-1-thread-5;守护线程:false
    ======-----------------------------2019-08-06T21:11:23.807:pool-1-thread-3;守护线程:false
    ======-----------------------------并发:2019-08-06T21:11:25.161
    ======-----------------------------并发:2019-08-06T21:11:25.161
    ======-----------------------------并发:2019-08-06T21:11:25.161
    ======-----------------------------并发:2019-08-06T21:11:25.161
    ======-----------------------------并发:2019-08-06T21:11:25.161
    ======-----------------------------2019-08-06T21:11:26.123:pool-1-thread-2;守护线程:false
    ======-----------------------------2019-08-06T21:11:26.183:pool-1-thread-4;守护线程:false
    ======-----------------------------2019-08-06T21:11:26.295:pool-1-thread-3;守护线程:false
    ======-----------------------------2019-08-06T21:11:26.701:pool-1-thread-5;守护线程:false
    ======-----------------------------2019-08-06T21:11:27.016:pool-1-thread-1;守护线程:false
    ======-----------------------------并发:2019-08-06T21:11:28.752
    ======-----------------------------并发:2019-08-06T21:11:28.752
    ======-----------------------------并发:2019-08-06T21:11:28.752
    ======-----------------------------并发:2019-08-06T21:11:28.752
    ======-----------------------------并发:2019-08-06T21:11:28.752
    ======-----------------------------2019-08-06T21:11:28.983:pool-1-thread-3;守护线程:false
    ======-----------------------------2019-08-06T21:11:29.548:pool-1-thread-5;守护线程:false
    ======-----------------------------2019-08-06T21:11:29.668:pool-1-thread-1;守护线程:false
    ======-----------------------------2019-08-06T21:11:29.827:pool-1-thread-2;守护线程:false
    ======-----------------------------2019-08-06T21:11:29.868:pool-1-thread-4;守护线程:false

    二、

  • 相关阅读:
    网页中添加下划线的方法汇总及优缺点
    git备注
    微信小程序封装年月日时分组件
    微信小程序底部弹窗动画
    微信小程序返回上一页的方法并传参
    微信小程序组件封装
    taro中子父传值
    taro初识一
    reactjs中使用高德地图计算两个经纬度之间的距离
    vue中使用scss
  • 原文地址:https://www.cnblogs.com/bjlhx/p/11302729.html
Copyright © 2011-2022 走看看