countDownLatch.await();
来源:2-4 并发模拟-代码
慕粉3495297
2018-07-21
最后一个log不会执行,前面的会执行,到countDownLatch.await();之后都不会执行,也没有抛出异常
写回答
2回答
-
Jimin
2018-07-21
你好,你少写了countDownLatch里特别关键的countDown方法的调用,导致主线程一直阻塞在await那里了。关于这个类的使用,后面课程里会有专门章节重点介绍。祝你学习愉快~
00 -
慕粉3495297
提问者
2018-07-21
具体代码如下
package com.mmall.concurrency; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; @Slf4j public class ConcurrencyTest { // 请求总数 public static int clientTotal = 5000; // 同时并发执行的线程数 public static int threadTotal = 200; //计数值 public static int count = 0; public static void main(String[] args) throws Exception { //线程池 ExecutorService executorService = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(threadTotal); final CountDownLatch countDownLatch = new CountDownLatch(clientTotal); for (int i = 0; i < clientTotal; i++) { executorService.execute(() -> { try { semaphore.acquire(); add(); log.info("count11:{}", count); semaphore.release(); } catch (Exception e) { log.error("exception: ", e); } });` } countDownLatch.await(); executorService.shutdown(); log.info("count: {}", count); } public static void add() { count++; } }
00
相似问题