package com.hanshimeng.other;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
/**
* java线程池CountDownLatch高并发场景
* @author hanshimeng
*
*/
public class Test {
/**
* 模拟高并发情况代码
*/
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();
}
}
输出结果:1000000
如需转载,请注明作者出处
作者:hanshimeng
出处:https://blog.youkuaiyun.com/hanshimeng