以下哪个java集合类是线程安全的,java集合线程不安全

  以下哪个java集合类是线程安全的,java集合线程不安全

  如何解决写爬虫IP受阻的问题?立即使用。

  线程安全

  首先要理解线程是如何工作的,jvm有一个主存,每个线程都有自己的工作。

  内存中,当一个线程对一个变量进行操作时,它必须在自己的工作。

  在内存中创建一个副本,然后在操作后将其写入main。

  记忆.当多个线程同时操作同一个变量时,可能会出现不可预知的结果。根据上面的解释,很容易想出相应的场景。

  使用synchronized的关键是建立一个监视器,可以是要修改的变量,也可以是其他你认为合适的对象,比如方法,然后锁定监视器实现线程安全。每个线程得到这个锁之后,在完成加载到工作内存的过程之后,就会释放它得到的锁——使用assign——store到mainmemory。这样就实现了所谓的线程安全。

  什么是线程安全?线程安全是怎么做的(原理)?线程安全是指多个线程访问同一个代码,不会产生不确定的结果。编写低依赖线程同步的线程安全代码。

  java相关集合

  Vector、ArrayList、LinkedList

  Vector和ArrayList的用法非常相似。它们都可以用来表示一组数量可变的对象应用程序,并且其中的元素可以被随机访问。

  Vector的方法都是同步的,线程安全的,而ArrayList的方法不是。因为线程同步必然会影响性能,所以ArrayList的性能比Vector好。

  ArrayList和LinkedList的区别

  为了处理数据项列表,Java提供了两个类ArrayList和LinkedList。ArrayList的内部实现是基于内部的array对象[],所以从概念上来说,它更像一个数组。但是链表的内部实现是基于一组连接的记录,所以更像是一个链表结构。所以,他们的表现大相径庭。

  从上面的分析可以看出,在ArrayList的前面或中间插入数据时,必须相应地将它后面的数据全部移回来,这必然会花费更多的时间。所以,当你的操作是在一列数据后面而不是前面或中间添加数据,并且需要随机访问其中的元素时,使用ArrayList会提供更好的性能。

  当访问LinkedList中的一个元素时,必须从链表的一端开始,沿着连接方向逐个查找,直到找到所需的元素。因此,当您的操作是在一列数据的前面或中间添加或删除数据,并按顺序访问元素时,您应该使用链表。

  在编程中,如果1和2两种情况交替出现,那么可以考虑使用List之类的通用接口,不要在意具体的实现。在特定情况下,其性能由特定的实现来保证。

  HashTable,HashMap,HashSet

  HashTable和HashMap采用相同的存储机制,实现基本相同,区别在于:

  1)、HashMap是非线程安全的,HashTable是线程安全的,内部方法基本同步。

  2),HashTable不允许空值的存在。

  在HashTable中调用put方法时,如果键为null,则直接抛出NullPointerException。还有其他细微的区别,比如初始化条目数组的大小,但是基本思想和HashMap是一样的。

  哈希集:

  1.HashSet是基于HashMap实现的,没有容量限制。

  2.HashSet是非线程安全的。

  3.HashSet不保证顺序。

  散列表:

  1.HashMap使用数组存储由键和值组成的Entry对象,没有容量限制。

  2.HashMap根据键哈希找到存储在数组中的条目对象的位置,并使用链表解决哈希冲突。

  3.HashMap在插入元素时可能需要扩展数组的容量。当扩展容量时,需要重新计算散列并将对象复制到新的数组中。

  4.HashMap是非线程安全的。

  5.HashMap遍历使用迭代器。

  散列表

  1.哈希表是线程安全的。

  2.HashTable中的键和值都不能为空。

  3.哈希表遍历使用枚举。

  树集,树图

  树集:

  1.TreeSet是基于TreeMap实现的,支持排序。

  2.TreeSet是非线程安全的。

  从HashSet和TreeSet的描述来看,TreeSet和HashSet一样,完全是基于Map实现的,都不支持get(int)获取指定位置的元素(需要遍历)。此外,TreeSet还提供了一些排序支持。例如,传入比较器实现、descendingSet和descendingIterator。

  树形图:

  1.TreeMap是典型的基于红黑树的Map实现,所以要求必须有一个键比较方法,要么传入比较器实现,要么Key对象实现Comparable接口。

  2.TreeMap是非线程安全的。

  总结

  这就是本文中关于各种java集合的线程安全的全部内容。希望对你有帮助。

  本文来自java入门专栏,欢迎学习!那是深入了解各种java集合的线程安全的细节。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: