高并发引发的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高并发引发的问题相关的知识,希望对你有一定的参考价值。

示例模拟10000次请求,每次并发数为100,每次请求,计数器加1,最后输出计数器值。
上代码:

package concurrent;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

/**
 * @Auther:zhl
 * @Date:2019/7/13
 * @Description: 并发测试
 */
public class ConcurrentSample 
    //并发线程数量
    private static int users = 100;
    //访问次数
    private static int count = 10000;
    //访问总量
    private static int number = 0;

    public static void main(String[] args) 
        //定义线程池
        ExecutorService executorService = Executors.newCachedThreadPool();
        //并发量
        Semaphore semaphore = new Semaphore(users);
        for (int i = 0; i < count; i++) 
            executorService.execute(() -> 
                try 
                    semaphore.acquire();
                    add();
                    semaphore.release();
                 catch (Exception e) 
                    e.printStackTrace();
                
            );
        
        try 
            Thread.sleep(3000);
         catch (Exception e) 
            e.printStackTrace();
        
        executorService.shutdown();
        System.out.println(number);
    
    public static void add() 
        number++;
    

计数器:9997
计数器:10000
计数器:9997
每次输出结果不一致,这都是并发导致的

以上是关于高并发引发的问题的主要内容,如果未能解决你的问题,请参考以下文章

并发高?可能是编译优化引发有序性问题

高并发场景下 disk io 引发的高时延问题

压测引发的思考——高并发用同步还是异步好?

高并发由InterruptedException异常引发的思考

高并发由InterruptedException异常引发的思考

高并发由InterruptedException异常引发的思考