1. 程式人生 > >使用CountDownLatch模擬高並發場景

使用CountDownLatch模擬高並發場景

println ren pri sta print cep 打印 ble thread

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模擬高並發場景