并发容器及安全共享策略(J.U.C)

本文探讨了Java并发容器,包括CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap和ConcurrentSkipListMap等,并分析了它们在多线程环境下的适用场景。还介绍了安全共享对象策略,强调线程安全对象和被守护对象的访问控制特点。
摘要由CSDN通过智能技术生成

并发容器及安全共享策略(J.U.C)

ArrayList-CopyOnWriteArrayList

CopyOnWriteArrayList,写操作复制在新数组上进行写的操作写完之后把原来的数组指向新的数组,整个写操作都是在锁的保护下进行的,这么做为了在多线程并发的情况下复制出多个副本出来把数据搞乱了

缺点:写操作的时候需要拷贝数组,消耗内存,如果愿数组内容比较多的时候会有gc问题,2、不能用于实时读的场景,这里比如拷贝数组新增元素都需要时间,虽然能满足最终一致性但是无法满足实时性,因此CopyOnWriteArrayList更适合读多写少的场景,设计思想是读写分离、最终一致性、使用时另外开辟空间,读操作都是在原数组上读不需要加锁,写操作需要加锁,避免并发时多个线程同时修改

HashSet、TreeSet->CopyOnWriteArraySet、ConcurrentSkipListSet

HashMap、TreeMap->ConcurrentHashMap、ConcurrentSkipListMap

ConcurrentHashMap不能为空,在类对于读操作做了大量优化,就有特别高的并发性

ConcurrentSkipListMap是有序的,支持更高的并发,存取时间和线程数无关的,在数据量一定的情况下并发的线程越多ConcurrentSkipListMap越能体现出优势,非多线程下尽量使用TreeMap,对并发性较低也可使用Collections里面的类,对于高并发程序应该使用ConcurrentSkipListMap提供更高的并发度

实例

 //请求总数
    private static int clientTotal=5000;

    //同时并发请求的线程数
    private static int threadTotal=200;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值