一、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:全部结束