码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-06-15 19:37:54      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:场景   list   hash   lis   运行   bsp   导致   存储   包含   

运行场景:多个线程同时调用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

标签:场景   list   hash   lis   运行   bsp   导致   存储   包含   

原文地址:http://www.cnblogs.com/cyh2009/p/7019556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!