ArrayList线程不安全演示: ArrayList线程不安全,为了保证线程的并发,和效率,它的add方法并没有加锁
这就是高并发情况下,出现的异常 java.util ConcurrentModificationException
解决list线程不安全的
(1):vavtor 里面的add方法加锁了,代码演示,并发性比较安全,但是效率降低代码演示
(2):使用扩展类包:Collections中的,从这个包中表明,set map也是不安全的
源码分析为什么Collections可以保证线程安全
(3)使用CopyOnWriteArrayList (写时复制),代码演示
源码的意思:添加一个元素在数组的后面:
1:初始化一个数组,拿到这个数组的长度,把数组赋值在末尾新增一行,然后再把新的数组重新赋值给数组。
例子讲解:比如现在班级点名,笔只有一只,也就是源码中的锁,表示班级中的某个人再写的时候不准其他的人过来写(防止多个线程同时写),当某个人写好了才把笔给释放掉,其他人就可以拿到这支笔了来写,而且每次只增加一行位置。
2:HashSet是不是线程安全的代码演示,说明他也是一样的也是线程不安全的
解决set不安全的问题
(1):CopyOnWriteSet从源码中我们发现他也是一个CopyOnWriteArrayList
3:集合不安全之Map代码演示:看到了这里我们发现他们的报错都是一样的所以他们的解决方法也是一样的。