threadTotal = 1 和threadTotal = 200;的并发情况出现5000的概率
来源:1-3 并发编程初体验
![](http://img1.sycdn.imooc.com/user/53a862ee0001909301800180-100-100.jpg)
互联网的搬运工
2018-03-18
public class CountExample1 { private static final Logger log = Logger.getLogger(CountExample1.class); // 请求总数 public static int clientTotal = 5000; // 同时并发执行的线程数 public static int threadTotal = 1; public static long count = 0; public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(threadTotal); // 同时申请200个请求 for (int i = 0; i < clientTotal; i++) { executorService.execute(new Runnable() { @Override public void run() { try { semaphore.acquire();// 申请一个许可 add(); semaphore.release(); // 释放一个许可 } catch (InterruptedException e) { log.error("exception", e); } } }); } executorService.shutdown(); log.info("count:" + count); } private static void add() { count++ ; }
写回答
1回答
-
你好,这里就是个模拟并发的场景,要表达的就是如果不做些特殊的处理,结果会有问题。这个的解决方法很多,在课程的原子性章节会有具体解答。如果你着急想看一下正确的结果,可以给add那个方法加上一个关键字synchronized,或者使用atomicInteger代替普通的Integer类做累加操作,但语法需要做相关等我调整,原子性那种可以重点关注。这里体验的例子,课程实际讲解部分会进行实际解决。祝你学习愉快~
032019-12-21
相似问题
Vector输出结果不是5000的问题
回答 3
并发和缓存
回答 1