有关高并发下List的问题以及高并发下如何使用List

简介: 有关高并发下List的问题以及高并发下如何使用List
直接看代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;
/**
 * @author :yanjun.hou
 * @description :
 * @create :2022-04-17 20:23:00
 */
public class ListTest {
    //普通list---会产生多线程操作的时候大小不是设想的 可能会减少
    static List<String> nomalList = new ArrayList<>();
    //使用集合工具类 转换list
    static List<String> colList = Collections.synchronizedList(new ArrayList<>());
    //可读写的list  推荐使用
    static List<String> copyOnWriteList = new CopyOnWriteArrayList<>();
    /**
     * 测试高并发下 List使用
     */
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new TestList());
        Thread t2 = new Thread(new TestList());
        
        t1.start();
        t2.start();
        
        t1.join();
        t2.join();
        
        System.out.println("【nomalList】:"+nomalList.size());
        System.out.println("【colList】:"+colList.size());
        System.out.println("【copyOnWriteList】:"+copyOnWriteList.size());
    }
    public static class TestList implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 3000; i++) {
                nomalList.add(UUID.randomUUID().toString().substring(0, 5));
                colList.add(UUID.randomUUID().toString().substring(0, 5));
                copyOnWriteList.add(UUID.randomUUID().toString().substring(0, 5));
            }
        }
    }
}
运行结果:

结论:
可以看出,普通List在多线程的情况下,会出现大小小与预期的情况。
相关文章
|
7月前
有关高并发下List的问题以及高并发下如何使用List
有关高并发下List的问题以及高并发下如何使用List
48 0
有关高并发下List的问题以及高并发下如何使用List
有关高并发下List的问题以及高并发下如何使用List
155 0
有关高并发下List的问题以及高并发下如何使用List
|
存储 设计模式 缓存
Redis(十)redis使用list解决高并发问题,如商品秒杀
redis之所以能解决高并发的原因是它可以直接访问内存,而以往我们用的是数据库(硬盘),提高了访问效率,解决了数据库服务器压力。
659 0
Redis(十)redis使用list解决高并发问题,如商品秒杀
|
6月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
991 1
|
5月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
5月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
5月前
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
|
6月前
|
Java API
使用 Java 来实现两个 List 的差集操作
使用 Java 来实现两个 List 的差集操作
195 3
|
5月前
|
存储 Java 索引
Java List接口实现原理与性能评估
Java List接口实现原理与性能评估
|
5月前
|
存储 缓存 安全
Java List操作详解及常用方法
Java List操作详解及常用方法