美文网首页笔试&&面试经验
Java中的常用集合和线程安全

Java中的常用集合和线程安全

作者: 親愛的破小孩 | 来源:发表于2017-08-31 14:10 被阅读14次

    一些常用的功能相同的线程安全和不安全的集合

    Vector:就比ArrayList多了一个同步化机制(线程安全)

    LinkedList因为成员方法大多是synchronized的,因此LinkedList是线程安全的。而ArrayList不是线程安全的。在扩容机制上,当Vector的元素数量超过它的初始化大小的时候会将容量翻倍,而ArrayList只会增长50%。

    ArrayList的数据结构是基于数组的(Object[]),而LinkList内部结构是基于一组链接的记录,形式上属于链表的。所以在增加元素方面linkList的效率更高,因为在ArrayList中增加元素,会牵扯一次重新排序。删除也是类似,所以ArrayList的查询性能要好些。反之LinkList增加,删除性能更好。如果是迭代读取的话,就没有什么差别了。

    HashTable:比hashMap多了一个线程安全。hashTable的方法都提供了同步机制。hashTable不允许插入空值,hashMap是允许的。

    ConcurrentHashMap:是一种高效但是也线程安全的集合。它比Hashmap来讲,是线程安全的,但是效率也比较高,因为它引入了一个分段锁的概念,可以理解为把一个大的Map拆分成了N个小的hashTable。根据key.hashCode()决定把key放到哪个hashtable中。HashMap的数据结构是数据和链表。通过hash算法计算该key所在的数组下标,根据equals取比较值。通俗的说救赎ConcurrenthashMap是对每个数组进行加锁,当通过hash算法得出的结果相同时才需要去同步数据。

    StringBuffer是线程安全的,而StringBuilder是线程不安全的。在单线程任务中,StringBuilder效率较高。

    线程安全的类其方法是同步的,每次只能一个访问,是重量级对象,效率较低。

    相关文章

      网友评论

        本文标题:Java中的常用集合和线程安全

        本文链接:https://www.haomeiwen.com/subject/acjqjxtx.html