使用CountDownLatch模拟高并发场景
Posted 指尖上的艺术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用CountDownLatch模拟高并发场景相关的知识,希望对你有一定的参考价值。
import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; public class IncrTest { public static void concurrenceTest() { /** * 模拟高并发情况代码 */ final AtomicInteger atomicInteger = new AtomicInteger(0); final CountDownLatch countDownLatch = new CountDownLatch(1000); // 相当于计数器,当所有都准备好了,再一起执行,模仿多并发,保证并发量 final CountDownLatch countDownLatch2 = new CountDownLatch(1000); // 保证所有线程执行完了再打印atomicInteger的值 ExecutorService executorService = Executors.newFixedThreadPool(10); try { for (int i = 0; i < 1000; i++) { executorService.submit(new Runnable() { @Override public void run() { try { countDownLatch.await(); //一直阻塞当前线程,直到计时器的值为0,保证同时并发 } catch (InterruptedException e) { e.printStackTrace(); } //每个线程增加1000次,每次加1 for (int j = 0; j < 1000; j++) { atomicInteger.incrementAndGet(); } countDownLatch2.countDown(); } }); countDownLatch.countDown(); } countDownLatch2.await();// 保证所有线程执行完 System.out.println(atomicInteger); executorService.shutdown(); }catch (Exception e){ e.printStackTrace(); } } public static void main(String[] args) throws InterruptedException { concurrenceTest(); } }
以上是关于使用CountDownLatch模拟高并发场景的主要内容,如果未能解决你的问题,请参考以下文章