线程安全 List 效率测试

List 常见类以及各自优缺点可自行参考 https://blog.csdn.net/weixin_39883065/article/details/111197724

本机环境

java 版本:1.8.0_161
window 信息:
请添加图片描述

测试代码

下面通过代码测试 List 线程安全类 Vector、Collections.synchronizedList(List list)、CopyOnWriteArrayList

测试添加 1 亿数据,开启 100 个线程,每个线程插入 100万

public class TestList {
    
    
    public static void main(String[] args) throws InterruptedException {
    
    
        long startTime = System.currentTimeMillis();
        // 线程不安全
        // List<Integer> list = new ArrayList<>();
        // 线程安全 100000000 耗时 27357
        // List<Integer> list = new Vector<>();
        // 线程安全 100000000 耗时 22023
         List<Integer> list = Collections.synchronizedList(new ArrayList<>());
        // 线程安全 100000000 耗时
        //List<Integer> list =new CopyOnWriteArrayList<>();
        int threadNum = 100;
        CountDownLatch countDownLatch = new CountDownLatch(threadNum);
        for (int i = 0; i < threadNum; i++) {
    
    
            Thread thread = new Thread(() -> {
    
    
                for (int j = 0; j < 1000000; j++) {
    
    
                    list.add(j);
                }
                countDownLatch.countDown();
            });
            thread.start();
        }
        countDownLatch.await();
        long endTime = System.currentTimeMillis();
        System.out.println(list.size());
        System.out.println(list.getClass()+"耗时:          "+(endTime-startTime));
    }
}

ArrayList 结果
请添加图片描述
Collections.synchronizedList(List list) 结果
请添加图片描述
Vector 结果
请添加图片描述
CopyOnWriteArrayList 结果,暂无结果,运行超 20 分钟,放弃测试

总结

  • 读多写少的情况下,推荐使用 CopyOnWriteArrayList 方式
  • 读少写多的情况下,推荐使用 Collections.synchronizedList() 和 Vector 差距不大

猜你喜欢

转载自blog.csdn.net/qq_41538097/article/details/129447813