龙空技术网

java多线程中ArrayList集合为什么不安全

小瓜瓜666 391

前言:

而今看官们对“java线程安全的集合类”都比较注重,大家都想要剖析一些“java线程安全的集合类”的相关资讯。那么小编也在网络上网罗了一些关于“java线程安全的集合类””的相关资讯,希望大家能喜欢,大家一起来了解一下吧!

多线程下不安全指的是数据不安全,比如数据丢失,数据覆盖,导致最终结果和预期的结果不一致,数据不可用。

下面我们开启30个线程,每个线程往ArrayList集合中添加一个元素:

30个线程往集合中添加元素

通过执行结果我们可以发现ArrayList最终的大小为28,丢失了两个数据。

为什么会出现这样的情况呢? --> 由于多线程同时操作,并且每个线程都是独立私有的,比如A线程和B线程同时拿到了刚初始完成的ArrayList集合,所以A,B线程的本地工作内存里面都是一个空的ArrayList集合,这时候A线程往自己本地工作空间里面的空ArrayList添加一个元素,并写回主内存。B线程也对自己的本地工作空间里面的ArrayList集合中添加一个元素,完成之后,并写回主内存,这时候B线程的操作就覆盖了A线程的操作,导致数据被覆盖,A线程的数据就丢失了。

所以在多线程操作集合中,我们可以使用:

1、vector集合类 2、使用Collections工具类:List<String> list=Collections.synchronizedList(new ArrayList); 3、使用CopyOnWriteArrayList类(写时复制,读写分离)

标签: #java线程安全的集合类 #java集合线程安全的类