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(); } }