RSS订阅优然探索
你的位置:首页 » 未分类 » 正文

ArrayList和Vector以及synchronizedList-synchronizedList

选择字号: 超大 标准 发布时间:2017-8-22 8:56:30 | 作者:admin | 0个评论 | 人浏览

 

ArrayList和Vector以及synchronizedList

ArrayList和Vector都是使用数组方式存储数据

区别大概就是Vector本身所有方法都是用synchronized修饰的,所以线程安全,而ArrayList没有

还有一个区别就是新增元素的时候Vector的增量是原来的一倍,而ArrayList增加原来的一半

复制代码
  ensureCapacity(++ oldCapacity = (minCapacity >= (newCapacity <=
            elementData =
复制代码

 

synchronizedList修饰的list如下

private static List<String> TEST_LIST = Collections.synchronizedList(new ArrayList<String>());

包裹了普通的ArrayList提供了线程安全的机制,类似Vector,所以到此为止synchronizedList与Vector的区别就是ArrayList与Vector的增量速度区别,所以需要线程安全操作时,增量比较快的时候推荐使用Vector,其他就没什么了

但是注意一点,

复制代码
*** <pre>
     *  List list = Collections.synchronizedList(**  *      Iterator i = list.iterator(); 
     *      **  }
复制代码

synchronizedList在迭代的时候,需要开发者自己加上线程锁控制代码,为什么呢?

首先讲下为什么要手动加线程锁代码:

复制代码
      addAll( index, Collection<?  E>(mutex) { ListIterator<E> list.listIterator(); 
        }
复制代码

因为迭代器涉及的代码没有在java api中没有加上线程同步代码

原因:整个迭代的过程中如果在循环外面不加同步代码,在一次次迭代之间,其他线程对于这个容器的add或者remove会影响整个迭代的预期效果,所以这里需要用户在整个循环外面加上synchronized(list)

 

标签:

猜你喜欢

发表评论

必填

选填

选填

必填,不填不让过哦,嘻嘻。

记住我,下次回复时不用重新输入个人信息

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。