有关高并发下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在多线程的情况下,会出现大小小与预期的情况。
相关文章
|
6月前
有关高并发下List的问题以及高并发下如何使用List
有关高并发下List的问题以及高并发下如何使用List
56 2
有关高并发下List的问题以及高并发下如何使用List
有关高并发下List的问题以及高并发下如何使用List
153 0
有关高并发下List的问题以及高并发下如何使用List
|
存储 设计模式 缓存
Redis(十)redis使用list解决高并发问题,如商品秒杀
redis之所以能解决高并发的原因是它可以直接访问内存,而以往我们用的是数据库(硬盘),提高了访问效率,解决了数据库服务器压力。
649 0
Redis(十)redis使用list解决高并发问题,如商品秒杀
|
6月前
|
消息中间件 Java Linux
2024年最全BATJ真题突击:Java基础+JVM+分布式高并发+网络编程+Linux(1),2024年最新意外的惊喜
2024年最全BATJ真题突击:Java基础+JVM+分布式高并发+网络编程+Linux(1),2024年最新意外的惊喜
|
5月前
|
缓存 NoSQL Java
Java高并发实战:利用线程池和Redis实现高效数据入库
Java高并发实战:利用线程池和Redis实现高效数据入库
489 0
|
3月前
|
监控 算法 Java
企业应用面临高并发等挑战,优化Java后台系统性能至关重要
随着互联网技术的发展,企业应用面临高并发等挑战,优化Java后台系统性能至关重要。本文提供三大技巧:1)优化JVM,如选用合适版本(如OpenJDK 11)、调整参数(如使用G1垃圾收集器)及监控性能;2)优化代码与算法,减少对象创建、合理使用集合及采用高效算法(如快速排序);3)数据库优化,包括索引、查询及分页策略改进,全面提升系统效能。
48 0
|
5月前
|
存储 NoSQL Java
探索Java分布式锁:在高并发环境下的同步访问实现与优化
【6月更文挑战第30天】Java分布式锁在高并发下确保数据一致性,通过Redis的SETNX、ZooKeeper的临时节点、数据库操作等方式实现。优化策略包括锁超时重试、续期、公平性及性能提升,关键在于平衡同步与效率,适应大规模分布式系统的需求。
170 1
|
4月前
|
算法 Java 调度
高并发架构设计三大利器:缓存、限流和降级问题之使用Java代码实现令牌桶算法问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之使用Java代码实现令牌桶算法问题如何解决
|
4月前
|
监控 网络协议 Java
Java面试题:解释Java NIO与BIO的区别,以及NIO的优势和应用场景。如何在高并发应用中实现NIO?
Java面试题:解释Java NIO与BIO的区别,以及NIO的优势和应用场景。如何在高并发应用中实现NIO?
75 0
|
4月前
|
设计模式 安全 NoSQL
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
68 0