Java——多线程高并发系列之ArrayList、HashSet、HashMap集合线程不安全的解决方案

本文详细介绍了Java中ArrayList、HashSet、HashMap在多线程环境下出现的并发修改异常,并提供了多种解决方案,包括使用Vector、Collections.synchronizedList/Map、CopyOnWriteArrayList/CopyOnWriteArraySet和ConcurrentHashMap。通过对源码的分析,阐述了CopyOnWrite容器利用读写分离思想确保线程安全的方法。
摘要由CSDN通过智能技术生成

1.ArrayList的线程不安全解决方案
将main方法的第一行注释打开,多执行几次,会看到如下图这样的异常信息:👇👇👇

这是一个 并发修改 异常,首先ArrayList肯定是线程不安全的,产生这个异常的原因就是可能第一个线程刚进入 ArrayList 集合中要进行 add 操作时,另外一个线程此时也进来进行 add 操作,而第三个线程又进来进行 get 操作,导致读写没办法进行同步了,最终打印结果的时候就炸了。

解决方案看代码中的剩下几行注释。

package test.notsafe;
 
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
 
/**
 * 演示ArrayList的线程不安全问题及解决方案
 */
public class ThreadDemo2 {
    public static void main(String[] args) {
        //List<String> list = new ArrayList<>();
 
        //解决方法1:使用Vector
        //List<String> list = new Vector<>();
 
        //解决方法2:Collections
        //List<String> list = Collections.synchronizedList(new ArrayList<>());
 
        //解决方法3:CopyOnW

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值