接下来的几篇分析当中都会以这段问题代码为基础进行讲解……(对于数量 +1 业务:5000个请求,200个并发)
包括接下来有四个注解(标记而已)代表不同含义:
@NotRecommend:课程里用来标记【不推荐】的类或者写法
@NotThreadSafe:课程里用来标记【线程不安全】的类或者写法
@Recommend:课程里用来标记【推荐】的类或者写法
@ThreadSafe:课程里用来标记【线程安全】的类或者写法
package com.mmall.concurrency; import com.mmall.concurrency.annoations.NotThreadSafe; 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 @NotThreadSafe 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(); semaphore.release(); } catch (Exception e) { log.error("exception", e); } countDownLatch.countDown(); }); } countDownLatch.await(); executorService.shutdown(); log.info("count:{}", count); } private static void add() { count++; } }