• 高并发-原子性-AtomicInteger


    线程不安全:

    //请求总次数
    private static int totalCount = 10000;
    //最大并发数
    private static int totalCurrency = 100;
    //计数初始值
    private static int count = 0;

    public static void main(String[] args) throws InterruptedException {
    final CountDownLatch countDownLatch = new CountDownLatch(totalCount);
    final Semaphore semaphore = new Semaphore(totalCurrency);
    ExecutorService executorService = Executors.newCachedThreadPool();
    for (int i = 0; i < totalCount; i++) {
    executorService.execute(new Runnable() {
    @Override
    public void run() {
    try {
    semaphore.acquire();
    //本身线程不安全
    count++;
    semaphore.release();
    countDownLatch.countDown();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    });
    }
    //其他线程运行完成执行下面操作
    countDownLatch.await();
    executorService.shutdown();
    System.out.println(count);
    }

    线程安全:

     //总共请求次数10000次 数值给大点 不然效果不明显
    private static int totalCount = 10000;
    //最大并发数 100个 数值给大点 不然效果不明显
    private static int totalCurrency = 100;
    // private static int count = 0;
    //使用原子类修饰
    private static AtomicInteger atomicInteger = new AtomicInteger(0);

    public static void main(String[] args) throws InterruptedException {

    final CountDownLatch countDownLatch = new CountDownLatch(totalCount);
    final Semaphore semaphore = new Semaphore(totalCurrency);
    ExecutorService executorService = Executors.newCachedThreadPool();
    for (int i = 0; i < totalCount; i++) {
    executorService.execute(() -> {
    try {
    semaphore.acquire();
    atomicInteger.incrementAndGet();
    semaphore.release();
    countDownLatch.countDown();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    });
    }
    //其他线程完成各自任务 countDownLatch.count==0
    countDownLatch.await();
    executorService.shutdown();
    System.out.println(atomicInteger);

    }


  • 相关阅读:
    oracle查看锁表及解锁
    二、web综合开发
    一、springboot入门
    oracle行转列及分组排序
    awk命令--转
    oracle 游标
    HttpServletRequestWrapper类的使用
    rabbitMQ
    java(其他)面试要点7
    java(框架)面试要点6
  • 原文地址:https://www.cnblogs.com/coderdxj/p/9946636.html
Copyright © 2020-2023  润新知