操作集合的线程安全考虑——java

Posted 菊次郎的幻想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作集合的线程安全考虑——java相关的知识,希望对你有一定的参考价值。

运行场景:多个线程同时调用ArrayList存放元素

两个线程A和B,在A线程调用的时候,list中暂时还未有元素存在,此时,list的size值为0,同时A在添加元素的时候,add进了一个元素,此时list的size仍然是0,在[0]位置存放了一个元素,存放完之后,我们的cpu对A线程任务的调度暂停了,然后开始调度B线程,同样B线程也是对list做元素存储的操作,此时的list的size为0,而B线程也给list添加了一个元素,在[1]位置上,也存放了一个元素,导致此时,我们的list中存放了有两个元素,而在B线程操作完add这个过程之后,没等到我们的cpu恢复A线程的操作,如果此时有C线程来对list做查询工作,那么此时查询到的list的size是1,而其中所包含的元素却有两个——此之谓ArrayList线程不安全,

 

同样的,如果发生在hashSet中,这个问题也是存在的

以上是关于操作集合的线程安全考虑——java的主要内容,如果未能解决你的问题,请参考以下文章

如何保证集合是线程安全的?

cc分享java:深入理解java各种集合的线程安全

cc分享java:深入理解java各种集合的线程安全

并发遍历实现线程安全遍历

java set的线程安全

java集合框架小结